Мне нужно создать ZIP-файл с помощью этой команды:
zip /dir/to/file/newZip /data/to/zip/data.txt
Это работает, но созданный zip-файл создает структуру каталогов, имитирующую каталог в необработанном файле. Это много дополнительных папок, которые мне не нужны.
Я не нашел ответа в беглом взгляде на страницу руководства или поиск в Google.
Ответы:
Вы можете использовать
-j
.источник
-j
не работает для вашего каталога (вместе с-r
), проверьте этот ответИспользование
-j
не будет работать вместе с-r
опцией.Так что обходной путь для этого может быть следующим:
Или встроенная версия
вы можете направить вывод,
/dev/null
если вы не хотите, чтобыcd -
вывод отображался на экранеисточник
cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
cd path/to/parent/dir/
вы можете легко рассчитать количество двойных точек../
.Используйте
-j
опцию:источник
Несколько связано - я искал решение сделать то же самое для каталогов. К сожалению,
-j
опция не работает для этого :(Вот хорошее решение о том, как это сделать: /superuser/119649/avoid-unwanted-path-in-zip-file
источник
Кроме того, вы можете создать временную символическую ссылку на ваш файл:
Это работает также для каталога.
источник
Сохраните родительский каталог, чтобы
unzip
не выбрасывать файлы вездеПри архивировании каталогов сохранение родительского каталога в архиве поможет избежать засорения вашего текущего каталога при последующем распаковывании архивного файла.
Поэтому, чтобы избежать сохранения всех путей, и поскольку вы не можете использовать -j и -r вместе (вы получите ошибку), вы можете сделать это вместо этого:
Это
../$(basename $PWD)
магия, которая сохраняет родительский каталог.Так что теперь
unzip my.zip
выдадим папку, содержащую все ваши файлы:Вместо того, чтобы засорять текущий каталог разархивированными файлами:
источник
Просто используйте
-jrm
опцию, чтобы удалить структуры файлов и каталоговисточник