Eine Datei in ein Zielverzeichnis entpacken?

4

Ich habe eine Datei mit dem Namen All CRGs.zipund möchte ihren Inhalt in ein Verzeichnis mit dem Namen entpacken data(das bereits existiert und in dem sich einige andere Dateien befinden).

Ist das möglich? Ich arbeite an OSX.

Ich habe es versucht:

$ unzip "All CRGs.zip" -d data/

Aber das entpackt alles, data/All CRGswonach ich nicht suche. Ich möchte, dass alles auf den Punkt kommt data.

Ist das möglich?

Richard
quelle
Ich bin sicher, dass es einfacher gewesen wäre, einfach darauf zu doppelklicken, es an den Standardspeicherort extrahieren zu lassen [normalerweise direkt neben der .zip-Datei] und dann den Inhalt an den neuen Speicherort zu ziehen.
Tetsujin
Ja, aber das ist nicht meine Frage :)
Richard

Antworten:

3

Sie können entweder die gesamte Ordnerstruktur einschließlich des All CRGsOrdners neu erstellen oder alle Ordner in der ZIP-Datei mit der -jOption -flag für den Befehl unzip löschen.

Das Problem ist, dass die ZIP-Datei mit dem All CRGs-Ordner als Top-Level erstellt wurde zip "All CRGs.zip" "All CRGs". Der richtige Weg wäre gewesen zip "All CRGs.zip" "All CRGs/*", ein ZIP-Archiv aller Dateien und Ordner im All CRGs-Ordner ohne den umgebenden Ordner zu erstellen .

Die einzige Möglichkeit, nur die Dateien unter Beibehaltung der Ordnerstruktur zu extrahieren, ist etwa folgende:

unzip "All CRGs.zip" -d data/ && mv "data/All CRGs/*" "data/" && rmdir "data/All CRGs"

Es wird den kompletten Ordner entpacken und danach den Inhalt des Ordners um eine Ebene nach oben verschieben und den (jetzt leeren) "All CRGs" -Ordner endgültig entfernen.

Heiglandreas
quelle
"Der richtige Weg wäre gewesen ..." entspricht nicht meiner Erwartung. Ich habe versucht, eine Zip-Datei mit dieser Syntax zu erstellen und erhalte die Meldung "Name stimmt nicht überein". Wenn ich All CRGs/*aus den Anführungszeichen herausnehme, werden die Dateien der ZIP-Datei hinzugefügt, wobei jedoch das übergeordnete Verzeichnis vorhanden ist.
Jason R. Coombs
Seit Beantwortung dieser Frage sind mindestens 2 neue Versionen von OS-X (macOS) hinzugekommen. Es hätte also eine Veränderung geben können. An welcher Version von macOS arbeitest du?
Heiglandreas
Guter Punkt. 10.12.5 ist die neueste Version und die Version, die ich zum Zeitpunkt dieses Kommentars verwendet habe.
Jason R. Coombs
Der mvBefehl verschiebt die versteckten Dateien nicht. eine zusätzliche mv "data/All CRGs/.*" "data/"ist erforderlich.
Kinjal Dixit
2

Da Sie wissen, dass die ZIP-Datei einen unerwünschten Ordner der obersten Ebene enthält, und Sie den Namen dieses Ordners der obersten Ebene kennen, können Sie einen Symlink verwenden, um den gesamten Inhalt dieses Ordners wie folgt im übergeordneten Ordner anzuzeigen:

ln -s . 'data/All CRGs'
unzip 'All CRGs.zip' -d data

Der lnSchritt bewirkt, dass der Ordner data/All CRGserstellt wird, der mit dem aktuellen Verzeichnis (relativ zu data/) verknüpft ist data/. Wenn Sie dann Dateien aus extrahieren All CRGs.zipund der unzipBefehl versucht, eine data/All CRGs/file.datDatei zu erstellen , wird diese Datei wie folgt erstellt data/./file.dat.

Diese Technik kann ohne zip-Datei mit touch demonstriert werden:

$ mkdir data
$ ln -s . data/subdir     
$ touch data/subdir/foo.txt
$ ls data
foo.txt subdir

Mit diesem Trick können Sie auch bestimmte Dateien oder Ordner in einen anderen Ordner extrahieren:

ln -s /tmp data/subdir2

Dann erscheint alles in dem Archiv, in das extrahiert subdir2wird, in /tmp.

Jason R. Coombs
quelle