Behalten Sie die Struktur der Zip-Datei bei

1

Ich habe ein Verzeichnis

main_folder
  first_folder
    second_folder
      empty.txt
      another_folder
        another_empty.txt

Ich möchte zip second_folderund bin dabei main_folder, also habe ich mit dem Befehl zip gemacht

zip -jr first_folder/zip_file first_folder/second_folder

Die Zip-Datei enthält

empty.txt
another_empty.txt

Aber ich möchte

empty.txt
another_folder
  another_empty.txt

Wie kann ich das haben?

Mika H.
quelle

Antworten:

1

Das von Ihnen gesetzte Flag -j (Junk Paths) macht das, was Sie wollen, zunichte, da es die Ordnerpfade entfernt. Davon abgesehen sehe ich jedoch keinen Weg, nur second + zu machen. Von der Manpage:

Möglicherweise möchten Sie ein Zip-Archiv erstellen, das die Dateien in foo enthält, ohne den Verzeichnisnamen foo aufzuzeichnen. Sie können die Option -j verwenden, um die Pfade
wegzulassen , wie in: zip -j foo foo / *

Soweit ich das beurteilen kann, funktioniert es in "zip" genau so (nichts in dem Mann deutet etwas anderes an).

Edit: Ich war ein bisschen hinter dem anderen her, als ich versuchte herauszufinden, wie man das macht, was man will.

Warum navigierst du nicht einfach zum Verzeichnis und komprimierst es? Wenn Sie dorthin zurückkehren möchten, wo Sie sich befanden, ist dies eine Zeitverschwendung.

cd first_folder / second_folder / && zip -r name ./ && mv name.zip $ {here} && cd -

(Danke an @KarthikT für die "cd -" Verknüpfung).

Nerdwaller
quelle
Die -jOption ist verfügbar, da ich nicht möchte, dass die Zip den vollständigen Pfad speichert. Ich möchte, dass es nur beginnend mit den Dateien in gespeichert wird second_folder. Ich denke, Ihr Vorschlag zur Navigation in das Verzeichnis funktioniert. Gibt es eine Möglichkeit, ohne zu navigieren?
Mika H.
@nerdwaller Sie können nur tun cd -, um zum alten pwd
Karthik T
@KarthikT Vorausgesetzt, Sie beginnen um ~ / obwohl ...
Nerdwaller
Ja, aber die Option -j entfernt den Dateipfad, sodass Sie in jedem der 15 tiefen Ordner ein Element haben könnten, und beim Extrahieren würden Sie 15 Elemente in einem Verzeichnis haben ... Ich sehe keines ohne zu navigieren An diesem Punkt.
Nerdwaller
1
@nerdwaller ich glaube du bist missverstanden cd und cd -hier. cd -kehrt Sie genau zu Ihrer hier Variablen zurück
Karthik T
1

Von der Manpage für zip

-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).

Nur das -j entfernen sollte das Problem beheben.

Karthik T
quelle
Na ja, aber dann speichert die Zip den vollständigen Pfad . Ich möchte, dass es nur beginnend mit den Dateien in gespeichert wird second_folder.
Mika H.
Ja, ich dachte, es war so etwas .. y nicht cd ..../second_folder && zip -r * && cd -:) Lassen Sie mich sehen, ob eine elegantere Option vorhanden ist
Karthik T
Dies, denke ich, deutet darauf hin, dass es keine andere Option gibt.
Karthik T