Зміна робочого каталогу


13

Я намагаюся стиснути каталог на

/home/cyrus/sql

І я хотів змінити робочий каталог під час застібання папки:

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

Але коли я перевіряю поштовий файл:

/ $ 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зберігається повний шлях відносно поточного каталогу. Якщо ви хочете, щоб ваш zipfile мав ваш 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якщо ви хочете, щоб zip-файл, створений у корені.
трійка

2

не впевнений, чи правильно я розумію, але -b не змінить кореневу папку. Він помістить тимчасовий zip-архів у каталог / home / cryus, після закінчення копіювання над sql.zip до поточного каталогу. Цей параметр корисний лише під час оновлення наявного архіву, і файловій системі, що містить цей старий архів, не вистачає місця для зберігання як старих, так і нових архівів одночасно.

спробуйте використовувати:

-j Збережіть лише ім’я збереженого файлу (небажаний шлях), і не зберігайте імена каталогів. За замовчуванням zip зберігатиме повний шлях (щодо поточного шляху).


1
-jможе бути неправильним; Я б припустив, що ОП хоче зберегти відносні шляхи, а не видаляти всі шляхи.
трійка

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

Їм rm символьне посилання, якщо ви хочете.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.