In Verzeichnis entpacken, unabhängig davon ob Verzeichnis im ZIP enthalten ist

In Verzeichnis entpacken, unabhängig davon ob Verzeichnis im ZIP enthalten ist

Nehmen wir an, ich habe eine ZIP-Datei, deren Inhalt wie folgt aussehen könnte

# file: with_out_dir.zip
file1.txt
file2.cpp
file3.js
some_sub_dir/
- file_in_subdir.txt
file4.xml

aber es könnte auch so aussehen

# file: with_dir.zip
archive/
- file1.txt
- file2.cpp
- file3.js
- some_sub_dir/
-- file_in_subdir.txt
- file4.xml

und jetzt würde ich mein Bash-Skript diese Dateien extrahieren lassen, aber in jedem Fall sollte es so extrahiert werden, /var/sample/dass es so aussieht:

# expected output
/var/
- sample/
-- file1.txt
-- file2.cpp
-- file3.js
-- some_sub_dir/
--- file_in_subdir.txt
-- file4.xml

Wie geht das am besten über ein bashSkript?

Im Moment verwende ich es, unzipum ZIP-Dateien zu extrahieren, aber ich bin für jedes andere Befehlszeilentool offen, wenn die Verwendung damit einfacher wäre.

Antwort1

Ich würde einfach vorschlagen:

  • In ein neues Verzeichnis extrahieren
  • Wenn das neue Verzeichnis nach der Extraktion genau ein Unterverzeichnis enthält, verschieben Sie alle darin enthaltenen Dateien eine Ebene nach oben und entfernen Sie das ursprüngliche Unterverzeichnis.

Übrigens, ein Archiv erstellen (tar, zip, was auch immer)ohneAlle Mitglieder des Archivs in einem Unterverzeichnis zu haben istTEUFLISCH. Ich weiß nicht, warum die Leute das tun!

Antwort2

Es gibt mehrere intelligente Extraktionstools (das habe ich herausgefunden, nachdem ich selbst eines geschrieben hatte). Vielleicht möchten Sie sich dtrx(installieren mit sudo apt-get install dtrx) ansehen.

dtrx stetserstellt das oberste Verzeichnis, wenn es noch nicht im Archiv vorhanden ist. Die Anpassung Ihres Bash-Wrapper-Skripts (das dtrxanstelle von aufruft unzip) wird dann viel einfacher, da nur die Unterverzeichnisse verschoben und das oberste Verzeichnis entfernt werden muss (da dieses immer vorhanden ist).

verwandte Informationen