2012-03-14 4 views
131

У меня есть необходимость создать почтовый индекс, используя командусоздать почтовый индекс - игнорировать структуру каталогов

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

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

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

+0

Stack Overflow - это сайт для вопросов программирования и развития. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). – jww

+0

[Unix zip directory, но исключены определенные подкаталоги] (https://superuser.com/q/312301/173513), [как исключить каталоги и файл, застегивающий каталог?] (Https://askubuntu.com/q/371579), [Как исключить каталог при застегивании файлов] (https://unix.stackexchange.com/q/219101/56041) и т. Д. – jww

+0

Я думал, что этот вопрос предшествует всем этим другим обменам стека, но, увы, пост суперпользователя на самом деле старше этого. Если есть что-то, что я могу сделать здесь, чтобы помочь, дайте мне знать. Это должен быть довольно горячий ответ, так как Google все еще загружает столько трафика здесь. : D – Jake

ответ

239

Вы можете использовать -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). 
+13

Если '-j' не работает для вашего каталога (вместе с' -r') checkout [этот ответ] (http://superuser.com/a/119661/45285) – czerasz

+0

когда-то это просто не work ... prefer @czerasz link;) который в основном представляет собой pushd popd combo – TecHunter

30

Используйте -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). 
2

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

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

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

12

Использование -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 - выход появиться на экране

-1

tar не работает для меня.

tar -czpvf filename.zip -C path/to/directory/folder . 

Я получаю сообщение об ошибке при попытке распаковать, такие filename.zip

конца-центрального каталога подпись не найдена.

jar works fine.

jar cvf filename.zip -C path/to/directory/folder . 
+0

Что вы создаете, это сжатый файл tar, а не zip-файл. Вот почему вы получаете сообщение об ошибке при распаковке. Он должен получать соответствующее расширение, например. «.tgz», а не «.zip». –

Смежные вопросы