Unix zipping sub directory, не содержащий родительский каталог
Я хочу заархивировать подкаталог и отправить его в другом месте, проблема у меня есть, когда я использую команду zip, в нее также входят все нежелательные слои каталогов, которые я не хочу.
например.
zip -r /new.zip /Unwanted1/Unwanted2/wanted1/wanted2/file.txt
###unzipped produces the following
/Unwanted1/Unwanted2/wanted1/wanted2/file.txt
###I want
/wanted1/wanted2/file.txt
update: каталог, в котором я хочу заархивировать, имеет множество вложенных каталогов, следовательно, -r. Также было бы здорово иметь дело с абсолютными путями, старым решением, используемым для записи компакт-диска, но мне это действительно не понравилось. Возможно, это лучший (единственный) способ.
Ответы
Ответ 1
Вам нужно поменять каталоги туда, где вы хотите начать, или, возможно, есть возможность "zip" сделать это для вас. Если вы слишком ленивы, чтобы читать варианты gazillion на странице руководства, как и я, сначала "cd", даже в script. Или вы можете заключить все это в круглые скобки, не затрагивая рабочую директорию оболочки или script:
(cd Unwanted1/Unwanted2; zip -r ~/new.zip ./wanted/file.txt)
Или, поскольку вы используете -r, вы, вероятно, хотите больше, чем просто file.txt, поэтому:
(cd Unwanted1/Unwanted2; zip -r ~/new.zip wanted)
Или используйте pushd/popd для перехода/выхода:
pushd Unwanted1/Unwanted2
zip -r ~/new.zip wanted
popd
Это работает в sh/ bash/csh/tcsh.
Ответ 2
Простейший, идиоматический способ:
(cd ./Unwanted1/Unwanted2 && zip -r ../../new.zip ./wanted/file.txt)
Теперь у zip, tar, rar, cpio и друзей есть опции для управления тем же, но они могут отличаться от версии к версии и, конечно же, от утилиты архива для архивной утилиты. Я предлагаю вам научиться работать с оболочкой для выполнения работы, и вы можете использовать любой желаемый формат архива.
Другой способ:
(cd ./Unwanted1/Unwanted2 && find . -name "*.txt" -print) | zip new.zip [email protected]
Ответ 3
Ну, может быть, один простой способ сделать
cd ./Unwanted1/Unwanted2
zip -r ../../new.zip ./wanted/file.txt
Но я не знаю, какова ваша ситуация. Возможно, вам нужно бежать из базового каталога? Кроме того, опция "-r" используется, когда вы хотите рекурсивно перемещать каталоги - пример, который вы предоставили, - это один файл.