Я делаю сценарий оболочки для упаковки некоторых файлов. Я архивирую каталог, как это:
zip -r /Users/me/development/something/out.zip /Users/me/development/something/folder/
Проблема в том, что в результирующем архиве out.zip содержится полный путь к файлу. То есть в разархивированном виде он будет иметь полный путь "/ Users / me / development / anotherthing /". Можно ли избежать этих глубоких путей при помещении каталога в архив?
Когда я запускаю zip из целевого каталога, у меня нет этой проблемы.
zip -r out.zip ./folder/
В этом случае я не получаю весь мусор. Однако соответствующий скрипт будет вызываться откуда угодно.
Я использую bash в Mac OS X 10.6.
$ pushd /some/path ; do-something ; popd
... или даже с подоболочками:$ ( cd /some/path ; do-something )
&&
вместо;
является хорошей идеей, чтобы другая команда не выполнялась в случаеcd
сбоя (опечатка или другая проблема):(cd /some/path && do-something)
zip -j
?Да. Используйте
-j
опцию сzip
.-j
это «мусор путь». Согласно справочной странице на zip :Использование
-j
означает следующую команду:Создайте архив, который выглядит так:
источник
Есть
pushd
иpopd
и$OLDPWD
. Предполагая, что$PWD
это/Users/me/development
сделать:Теперь
$PWD
вернулся/Users/me/development
источник