wie man das entpackte Zielverzeichnis angibt

21

Gibt es eine Option für den Befehl linux zip, mit der ich das Zielverzeichnis, in das es entpackt wird, fest codieren kann? Zum Beispiel möchte ich ./mydir-Dateien in myzipfile.zip komprimieren, aber ich möchte, dass der Befehl unzip ein bestimmtes Verzeichnis "projx" erstellt und die Dateien, die sich unter ./mydir befinden, dahin erweitert.

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )
seedhom
quelle
Unter Unix: unix.stackexchange.com/questions/12686/…
Ciro Santilli am

Antworten:

18

Es gibt keine solche Option, zumindest nicht für Info-ZIP. Sie müssen ein Verzeichnis projx selbst erstellen , Ihre Dateien in dieses Verzeichnis verschieben / kopieren und es dann weitergeben zip.

Wenn das Verzeichnis bereits vorhanden ist, übergeben Sie einfach die Option -dan unzip, um das zu extrahierende Zielverzeichnis anzugeben.

scai
quelle
4

Dafür gibt es einen anderen Weg. Sie können den gesamten Inhalt der ZIP-Datei mit der folgenden Methode reduzieren. Zielverzeichnis ist " projx " und führen folgenden Befehl aus.

cd /projx && unzip -j /path/to/myzipfile.zip

Die Option -j heißt "Junk-Pfade" und speichert jede Datei im aktuellen Verzeichnis, anstatt eine Verzeichnisstruktur zu extrahieren.

Chaminda Bandara
quelle
0

Ich kenne keine bestimmte Befehlszeilenoption, aber Sie können die folgenden Befehle verwenden, um Ihr Ziel zu erreichen:

ln -s mydir projx
zip -r myzipfile.zip projx
rm projx

Mit dem ersten Befehl wird eine symbolische Verknüpfung erstellt, über die Sie auch auf die Dateien in mydirzugreifen können projx. Bei Verwendung von Info-ZIP(getestet mit Version 2.31) wird die symbolische Verknüpfung dereferenziert (dies ist die Standardeinstellung, sofern Sie nichts anderes angeben -y) und die Dateien werden rekursiv gespeichert:

adding: projx/ (stored 0%)
adding: projx/foo.1 (deflated 23%)
adding: projx/bar.2 (deflated 73%)
...

Sie sehen, der Ordnername wird auch in der Datei gespeichert - also wird beim Extrahieren das Verzeichnis projxerstellt.

Ich kann mir zwar keine Möglichkeit vorstellen, absolute Pfade zu speichern, aber das ist sowieso eine schlechte Idee.

mpy
quelle
Der absolute Pfad funktioniert nur unter MacOS, wenn die Option angegeben wird -jj. Auf anderen Betriebssystemen wird nur die Option -junterstützt (und -jjals -jsolche interpretiert ), die alle führenden Pfade entfernt und somit zum Gegenteil führt (ein sehr cleveres Design ...).
10.07.13