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

Допустим, у меня есть /path/to/test/tmp/ и я хочу, чтобы все в tmp/ было заархивировано, как будто я запускаю команду из этой папки.

Флаг -r получает то, что я хочу, но включает информацию о пути над каталогом, который мне нужен, в зависимости от того, где я его запускаю:

user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
  adding: tmp/foo.txt (deflated 68%)
  adding: tmp/bar/bar.txt (deflated 41%)
  adding: tmp/baz/baz/baz.txt (deflated 92%)

Флаг -j обрезает все, кроме имен файлов:

user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
  adding: foo.txt (deflated 68%)
  adding: bar.txt (deflated 41%)
  adding: baz.txt (deflated 92%)

Что мне нужно, это то, что даст мне это:

adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)

Но это я могу указать для запуска из любого места. Я пытаюсь написать это в cron. Я не могу найти то, что я ищу на странице руководства. Как я могу осуществить это, кроме фактического изменения каталогов в моем скрипте?

1 ответ1

1

Похоже, что zip (по крайней мере, версия из Info-ZIP на моей платформе) не позволяет вам этого делать. (В отличие от tar , у которого есть опция -C/--directory , как намекнул @ Xen2050.)

Но я должен спросить, неужели так плохо менять каталоги в вашем скрипте? Особенно, если вы можете сделать это в подоболочке и не повлиять на текущий рабочий каталог скрипта (подробно объясняется в этом ответе SO):

pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd    # prints the same as in line 1

Обратите внимание, что этот файл Zip будет сохранен в /path/to/test/tmp .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .