Изменить рабочий каталог


13

Я пытаюсь сжать каталог в

/home/cyrus/sql

И я хотел изменить рабочий каталог при архивировании папки:

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

Но когда я проверяю zip-файл:

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

Корневая папка должна была быть sql. Что я сделал не так?

Ответы:


10

От man zip:

-b path

 --temp-path path

Используйте указанный путь для временного архива zip. Например:

zip -b /tmp stuff *

поместит временный zip-архив в каталог / tmp, скопировав файл stuff.zip в текущий каталог, когда закончите. Этот параметр полезен, когда обновляется существующий архив, а в файловой системе, содержащей этот старый архив, недостаточно места для одновременного хранения как старых, так и новых архивов. В некоторых случаях это может быть полезно при потоковой передаче, чтобы избежать необходимости в дескрипторах данных. Обратите внимание, что использование этой опции может потребовать, чтобы zip занял дополнительное время, чтобы скопировать файл архива, когда это делается в файловой системе назначения.

По умолчанию zipхранит полный путь относительно текущего каталога. Если вы хотите, чтобы в вашем zip-файле sqlкаталог был корневым, вам нужно будет запустить команду из /home/cyrusкаталога.


14

Если вы хотите zipсодержимое данного каталога и сохранить zipфайл в текущем каталоге, вы можете написать его:

(cd /some/dir && zip -r - dir-there) > file.zip

5

-bуказывает, куда zipследует помещать временные файлы, а не то, что он должен где-то менять каталог. От man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

Попробуй это:

cd /home/cyrus && zip sql.zip sql

Или, cd /home/cyrus && zip /sql.zip sqlесли вы хотите, чтобы почтовый файл был создан в корне.
tripleee

2

не уверен, правильно ли я понимаю, но -b не изменит корневую папку. Он поместит временный zip-архив в каталог / home / cryus, после чего скопирует файл sql.zip в текущий каталог. Этот параметр полезен только при обновлении существующего архива, а в файловой системе, содержащей этот старый архив, недостаточно места для одновременного хранения как старых, так и новых архивов.

попробуй использовать:

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


1
-jможет быть не прав; Я бы предположил, что OP хочет сохранить относительные пути, а не удалить все пути.
tripleee

2

Вдохновленный ответом Стефана:

(cd /home/cyrus; zip -r sql.zip sql;)

Результат:

  1. у вас есть sql.zip в / home / cyrus /
  2. sql.zip содержит каталог sql / и все его содержимое
  3. ваш начальный PWD не меняется

4
Как это лучше?
Стивен Раух

0

Может быть проще создать символическую ссылку на папку, которую вы пытаетесь заархивировать, в текущий каталог. Таким образом, вы можете остаться там, где вы есть.

ln -s /path/to/whatever .
zip -r myzip whatever

Их символическая ссылка, если хотите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.