Ответы:
Поэтому, если я правильно понимаю, вы пытаетесь заархивировать файлы и папки в определенной папке, но не включая корневую папку.
Пример:
/test/test.txt
/test/test2.txt
где test.txt и test2.txt будут храниться в zip, но не в / test /
Вы можете перейти в каталог / test / и запустить что-то вроде:
zip -r filename.zip ./*
Что бы создать архив в той же папке с именем filename.zip. Или, если запустить его из-за пределов папки, вы можете запустить,
zip -r test.zip test/*
/ * - это часть, которая включает в себя только содержимое папки, а не всю папку.
Изменить: OP хотел несколько почтовых индексов, решение в конечном итоге было немного взломать, мне интересно, есть ли лучший способ сделать это.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
не работает. Есть ли правильный способ добиться этого за пределами каталога?
Используйте опцию -j
или --junk-paths
в вашей команде zip.
-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).
Как насчет этой команды?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Хотелось бы найти способ более точно указать сохраненный путь.
Надеюсь это поможет.
(cd directory && zip -r ../out.zip .)
Он хранит основную оболочку в том же каталоге и изменяет только каталог вложенной оболочки, которая умирает после команды.