Ich habe eine große Datei foo.tar.xz
, die eine Menge (sagen wir 200000) Dateien enthält. Ich habe herausgefunden, dass dieses Archiv einige (ungefähr 5000) Dateien enthält, die ich nicht möchte. Ich habe nicht genügend Speicherplatz, um das Ganze auf meiner Festplatte zu dekomprimieren. Außerdem befürchte ich, dass Attribute / Rechte verloren gehen könnten, wenn ich dies tue. Ich habe aber genug Platz, um zwei Kopien des komprimierten Archivs zu hosten . Gibt es ein Tool, um einige der Dateien (angegeben mit einem regulären Ausdruck im Dateinamen) im Handumdrehen aus dem Archiv zu entfernen, dh ohne das Archiv in einzelne Dateien zu entpacken?
--wildcards
Hilfe ... Ich musste zu./
Beginn des Musters allerdings einbeziehen ...GNU tar hat eine
--delete
Option, die heutzutage auch mit Archiven funktioniert.Verwenden Sie es wie folgt, zum Beispiel:
Achtung: Es wird höchstwahrscheinlich nicht auf jede Art von Magnetbandmedium arbeiten. Hat
tar
aber keine Probleme in einer Pipe zu arbeiten, so kann man einfach eine temporäre tar-Datei verwenden und das Band danach damit überschreiben. Es funktioniert auch nicht bei komprimierten Dateien, daher müssten Sie die Datei dekomprimieren.Aufgrund der (konstruktionsbedingt) gepackten Linearität von Teerarchiven ist der Vorgang in jedem Fall eher langsam.
quelle
gtar --delete
.-T
funktioniert mit--delete
und--wildcards
ermöglicht es Ihnen, Muster anstelle von Dateinamen zu verwenden. Erstellen Sie daher eine temporäre Datei, die die Muster enthält, und verwenden Sie sieunxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
. Es wird kein vollständiger regulärer Ausdruck ausgeführt (wenn Sie dies benötigen, verwenden Sie einfachtar -t
eine Liste der zu löschenden Dateinamen und erstellen Sie sie).Laut Handbuch können Sie eine Liste von Dateinamen übergeben,
tar
um nur diese zu extrahieren. Beispielsweise:quelle