Избегайте нежелательного пути в Zip-файле

Я делаю сценарий оболочки для упаковки некоторых файлов. Я застегиваю каталог следующим образом:

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/

В этом случае я не получаю все мусор. Тем не менее, сценарий, о котором идет речь, будет вызываться из любой точки.

FWIW, я использую bash для Mac OS X 10.6.

39 голосов | спросил jerwood 14 MaramSun, 14 Mar 2010 04:30:53 +03002010-03-14T04:30:53+03:0004 2010, 04:30:53

2 ответа


74

В вашем скрипте должен использоваться cd или pushd и popd, чтобы перейти в каталог, который будет корнем архива до , выдав zip. Как вы это сделаете, это будет зависеть от того, как скрипт знает, что делать. Но, если вы хотите, чтобы /Users /me /development /something /folder были заархивированы внутренними путями только ./folder , вам нужно будет сделать это:

pushd /Users/me/development/something
zip -r /path/to/out.zip ./folder/
popd

Это приведет к вашему out.zip , содержащему относительные пути, которые вы хотите.

Если вам нужна помощь в написании сценариев, вам нужно показать нам свой скрипт.

ответил quack quixote 14 MaramSun, 14 Mar 2010 04:59:31 +03002010-03-14T04:59:31+03:0004 2010, 04:59:31
4
  

Проблема заключается в том, что полученный архив out.zip имеет весь путь к файлу в нем.
  ...
  Можно ли избежать этих глубоких путей при помещении каталога в архив?

Да. Используйте опцию -j с помощью zip. -j - это «нежелательный путь». В соответствии с справочной страницей в почтовом индексе :

  

Храните только имя сохраненного файла (удалите путь) и не храните его   имена каталогов. По умолчанию zip сохранит полный путь (относительно   текущий каталог).

Использование -j означает следующую команду:

zip -j myarchive.zip file1.txt dir1/file2.txt dir2/dir3/file3.txt ../file4.txt

Создает архив, который выглядит так:

myarchive.zip
    |
    +-- file1.txt
    +-- file2.txt
    +-- file3.txt
    +-- file4.txt
ответил jww 4 Jam1000000amSun, 04 Jan 2015 04:00:19 +030015 2015, 04:00:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132