Respektable Projekte freigeben tar - Archiven , die ein einzelnes Verzeichnis enthalten, zum Beispiel zyrgus-3.18.tar.gz
einen enthält zyrgus-3.18
Ordner, die wiederum enthält src
, build
, dist
etc.
Bei einigen Punk-Projekten steht jedoch alles an der Wurzel: '- (Dies führt zu einem völligen Durcheinander beim Aufheben der Archivierung. Manuelles Erstellen eines Ordners ist jedes Mal mühsam und die meiste Zeit überflüssig.
- Gibt es eine superschnelle Methode, um festzustellen, ob eine .tar- oder .tar.gz-Datei mehr als ein einzelnes Verzeichnis im Stammverzeichnis enthält? Auch für ein großes Archiv.
- Oder noch besser, gibt es ein Tool, das in solchen Fällen ein Verzeichnis (Name des Archivs ohne die Erweiterung) erstellt und alles darin ablegt?
But some punk projects put everything at the root :'-(
Bei einigen Punk-Projekten wird alles völlig unnötig in einem Ordner abgelegt, wenn man bedenkt, dass sich bereits alles in einem umschließenden Archiv befindet. Wenn Sie es herunterladen und in einen eigenen Ordner entpacken, wie es ein intelligenter Benutzer tun würde, werden Sie am Ende mit all dem fertig Inhalt begrub eine weitere Schicht nach unten. ;-)Antworten:
patool verarbeitet verschiedene Arten von Archiven und erstellt ein Unterverzeichnis, falls das Archiv mehrere Dateien enthält, um ein Überfüllen des Arbeitsverzeichnisses mit den extrahierten Dateien zu verhindern.
Archiv extrahieren
Verwenden Sie, um eine Liste der unterstützten Formate zu erhalten
patool formats
.quelle
alien
sie in eine Deb für Ubuntu umgewandelt.patool
sollte in den Repos für Debian und Ubuntu sein, wenn Sie eine aktuelle Version ausführen.Sie könnten so etwas tun
um zu sehen, welche Top-Level-Einträge ein Teer hat; Pipe, um
wc -l
zu überprüfen, ob es mehr als eine gibt. Beachten Sie, dass es einige Fälle gibt, in denen dies fehlschlagen würde, z. B. wenn der Teer Dateipfade des Formularssomedir/whatever
und auch./somedir/whatever
(oder etwas verrückteres) enthält. Dies sollte jedoch ungewöhnlich sein.Dadurch wird die gesamte TAR-Datei gelesen, bevor etwas ausgegeben wird. Dies
sort
sollte jedoch schneller sein als das eigentliche Extrahieren, da nur ein sequenzieller Lesevorgang ausgeführt wird und große Dateien übersprungen werden können.Wenn Sie dies interaktiv tun und die Datei möglicherweise groß ist, können Sie
sort -u
zuuniq
und Control+ wechseln , Cwenn mehr als eine Sache gedruckt wird.quelle
sort | uniq
kann auf gekürzt werdensort -u
.uniq -c
du kannst tun:
... um den Inhalt einer
tar
Datei aufzulisten.Wenn Sie wissen möchten, wie viele Ebenen tief es geht, können Sie Folgendes tun:
Sie können eine Explosion beim Extrahieren ausdrücklich verbieten mit:
quelle
Dies sollte tun, was Sie wollen. Ich bin sicher, jemand kann es verbessern. In diesen Beispielen gehe ich von einem gzip-komprimierten Tar-Archiv aus, da dies am häufigsten vorkommt.
Sie möchten ein Archiv, in dem sich keine Geschwisterknoten im Verzeichnisbaum auf Stammebene befinden.
Jeder Eintrag in der Teer-Inhaltsliste muss mit demselben Muster beginnen. Dieses Muster ist der Basisverzeichnispfad, den alle Einträge im Archiv gemeinsam nutzen müssen. Wenn zwei Einträge nicht mit demselben Muster beginnen, sind sie Geschwister.
Die erste Zeile in der Teer-Inhaltsliste gibt Ihnen das minimale Muster an, nach dem Sie suchen müssen. Dies ist der BASEPATH.
Um auf explosive Tarballs zu testen, müssen Sie überprüfen, ob eine Zeile der Teerinhaltsliste nicht mit dem BASEPATH beginnt.
Verwandle dies in eine Shell-Funktion:
Von hier aus können Sie eine sichere Funktion zum Extrahieren von Teerarchiven schreiben.
quelle
aunpack archive.tar
ist was ich benutze.Ein Teil des guten alten Atool- Pakets. Manpage: https://linux.die.net/man/1/atool
quelle