Zmień katalog roboczy

13

Próbuję skompresować katalog o

/home/cyrus/sql

I chciałem zmienić katalog roboczy podczas kompresowania folderu:

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

Ale kiedy sprawdzam plik 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

Folder główny powinien być sql. Co zrobiłem źle?

Jürgen Paul
źródło

Odpowiedzi:

10

Od man zip:

-b path

 --temp-path path

Użyj określonej ścieżki tymczasowego archiwum zip. Na przykład:

zip -b /tmp stuff *

umieści tymczasowe archiwum zip w katalogu / tmp, po zakończeniu kopiując plik stuff.zip do bieżącego katalogu. Ta opcja jest przydatna podczas aktualizacji istniejącego archiwum, a system plików zawierający to stare archiwum nie ma wystarczającej ilości miejsca do przechowywania zarówno starych, jak i nowych archiwów w tym samym czasie. W niektórych przypadkach może być również przydatny podczas przesyłania strumieniowego, aby uniknąć potrzeby deskryptorów danych. Należy pamiętać, że użycie tej opcji może wymagać zip, aby skopiować plik archiwum po zakończeniu do docelowego systemu plików.

Domyślnie zipprzechowuje pełną ścieżkę względem bieżącego katalogu. Jeśli chcesz, aby plik zip miał sqlkatalog jako katalog główny, musisz uruchomić polecenie z /home/cyruskatalogu.

MattDMo
źródło
14

Jeśli chcesz zipzawartość danego katalogu i przechowywać zipplik w bieżącym katalogu, możesz go napisać:

(cd /some/dir && zip -r - dir-there) > file.zip
Stéphane Chazelas
źródło
5

-bokreśla, gdzie zipnależy umieścić pliki tymczasowe, a nie to, że powinien gdzieś zmienić katalog. Od man zip:

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

Spróbuj tego:

cd /home/cyrus && zip sql.zip sql
Chris Down
źródło
Lub cd /home/cyrus && zip /sql.zip sqljeśli chcesz, aby plik zip został utworzony w katalogu głównym.
tripleee
2

nie jestem pewien, czy rozumiem to prawo, ale -b nie zmieni folderu głównego. Umieści tymczasowe archiwum zip w katalogu / home / cryus, po zakończeniu kopiując plik sql.zip do bieżącego katalogu. Ta opcja jest przydatna tylko podczas aktualizacji istniejącego archiwum, a system plików zawierający to stare archiwum nie ma wystarczającej ilości miejsca do przechowywania zarówno starych, jak i nowych archiwów w tym samym czasie.

Spróbuj użyć:

-j Zapisz tylko nazwę zapisanego pliku (skasuj ścieżkę) i nie przechowuj nazw katalogów. Domyślnie zip zapisze pełną ścieżkę (względem bieżącej ścieżki).

Raza
źródło
1
-jmoże nie mieć racji; Zakładam, że OP chce zachować ścieżki względne, a nie usuwać wszystkie ścieżki.
tripleee
2

Zainspirowany odpowiedzią Stephane:

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

Wynik:

  1. masz sql.zip w / home / cyrus /
  2. sql.zip zawiera katalog sql / i całą jego zawartość
  3. początkowa PWD nie zmienia się
Dmitrii Cretu
źródło
4
Jak to jest lepsze?
Stephen Rauch,
0

Łatwiej może być dowiązanie symboliczne folderu, który próbujesz skompresować do bieżącego katalogu. W ten sposób możesz pozostać tam, gdzie jesteś.

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

Jeśli chcesz, to dowiązanie symboliczne.

jonr
źródło