создать почтовый индекс - игнорировать структуру каталогов - PullRequest
188 голосов
/ 15 марта 2012

Мне нужно создать zip с помощью команды

zip /dir/to/file/newZip /data/to/zip/data.txt

Это работает, но созданный zip-файл создает структуру каталогов, имитирующую каталог в необработанном файле. Это много лишних папок, которые мне не нужны.

Я не нашел ответа в беглом взгляде на страницу руководства или поиск в Google.

Ответы [ 6 ]

314 голосов
/ 15 марта 2012

Вы можете использовать -j.

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).
32 голосов
/ 15 марта 2012

Используйте параметр -j:

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).
24 голосов
/ 08 марта 2017

Использование -j не будет работать вместе с параметром -r.
Так что обходной путь для этого может быть следующим:

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

Или встроенная версия

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

вы можете направить вывод на /dev/null, если не хотите, чтобы вывод cd - появлялся на экране

17 голосов
/ 23 января 2013

Отчасти связано - я искал решение сделать то же самое для каталогов. К сожалению, опция -j не работает для этого: (

Вот хорошее решение о том, как это сделать: https://superuser.com/questions/119649/avoid-unwanted-path-in-zip-file

2 голосов
/ 05 апреля 2016

Кроме того, вы можете создать временную символическую ссылку на ваш файл:

ln -s /data/to/zip/data.txt data.txt
zip /dir/to/file/newZip !$
rm !$

Это работает и для каталога.

0 голосов
/ 06 апреля 2018

просто используйте опцию -jrm, чтобы удалить файл и каталог структуры

zip -jrm /path/to/file.zip /path/to/file
...