Arbeitsverzeichnis ändern

12

Ich versuche ein Verzeichnis unter zu komprimieren

/home/cyrus/sql

Und ich wollte das Arbeitsverzeichnis beim Zippen des Ordners ändern:

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

Aber wenn ich die Zip-Datei überprüfe:

/ $ 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

Der Stammordner sollte gewesen sein sql. Was habe ich falsch gemacht?

Jürgen Paul
quelle

Antworten:

10

Von man zip:

-b path

 --temp-path path

Verwenden Sie den angegebenen Pfad für das temporäre ZIP-Archiv. Beispielsweise:

zip -b /tmp stuff *

legt das temporäre zip-Archiv im Verzeichnis / tmp ab und kopiert es über stuff.zip in das aktuelle Verzeichnis, wenn es fertig ist. Diese Option ist nützlich, wenn ein vorhandenes Archiv aktualisiert wird und das Dateisystem, das dieses alte Archiv enthält, nicht über genügend Speicherplatz verfügt, um sowohl alte als auch neue Archive gleichzeitig zu speichern. In einigen Fällen kann es auch beim Streaming nützlich sein, um die Notwendigkeit von Datendeskriptoren zu vermeiden. Beachten Sie, dass das Kopieren der Archivdatei in das Zieldateisystem bei Verwendung dieser Option unter Umständen zusätzliche Zeit in Anspruch nimmt.

Standardmäßig wird zipder vollständige Pfad relativ zum aktuellen Verzeichnis gespeichert. Wenn Sie möchten, dass Ihre Zip-Datei Ihr sqlVerzeichnis als Stammverzeichnis hat, müssen Sie den Befehl über das /home/cyrusVerzeichnis ausführen .

MattDMo
quelle
14

Wenn Sie zipden Inhalt eines bestimmten Verzeichnisses und die zipDatei im aktuellen Verzeichnis speichern möchten , können Sie es schreiben:

(cd /some/dir && zip -r - dir-there) > file.zip
Stéphane Chazelas
quelle
5

-bGibt an, wo ziptemporäre Dateien abgelegt werden sollen, nicht, dass das Verzeichnis geändert werden soll. Von man zip:

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

Versuche dies:

cd /home/cyrus && zip sql.zip sql
Chris Down
quelle
Oder cd /home/cyrus && zip /sql.zip sqlwenn Sie möchten, dass die ZIP-Datei im Stammverzeichnis erstellt wird.
Tripleee
2

Ich bin nicht sicher, ob ich das richtig verstehe, aber -b wird den Stammordner nicht ändern. Das temporäre ZIP-Archiv wird im Verzeichnis / home / cryus abgelegt und anschließend über sql.zip in das aktuelle Verzeichnis kopiert. Diese Option ist nur nützlich, wenn ein vorhandenes Archiv aktualisiert wird. Das Dateisystem, das dieses alte Archiv enthält, verfügt nicht über genügend Speicherplatz, um sowohl alte als auch neue Archive gleichzeitig zu speichern.

versuchen zu benutzen:

-j Speichert nur den Namen einer gespeicherten Datei (den Pfad nicht angeben) und speichert keine Verzeichnisnamen. Standardmäßig speichert zip den vollständigen Pfad (relativ zum aktuellen Pfad).

Raza
quelle
1
-jkönnte nicht richtig sein; Ich würde annehmen, dass das OP relative Pfade beibehalten und nicht alle Pfade entfernen möchte.
Tripleee
2

Inspiriert von Stephanes Antwort:

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

Das Ergebnis:

  1. Sie haben eine sql.zip in / home / cyrus /
  2. sql.zip enthält sql / directory und seinen gesamten Inhalt
  3. Ihre anfängliche PWD ändert sich nicht
Dmitrii Cretu
quelle
4
Wie ist das besser
Stephen Rauch
0

Es ist möglicherweise einfacher, den Ordner, den Sie komprimieren möchten, mit dem aktuellen Verzeichnis zu verknüpfen. So können Sie bleiben, wo Sie sind.

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

Sie sind der Symlink, wenn Sie es wünschen.

jonr
quelle