Ich möchte eine TAR-Datei erstellen, in der alle Verzeichnisse und Dateien in alphabetischer Reihenfolge verarbeitet werden. Dies gilt für die gesamte Verzeichnishierarchie, die gerade geteert wird. Daher wird zunächst das erste Verzeichnis alphabetisch verarbeitet und dann die Unterverzeichnisse in alphabetischer Reihenfolge usw. Ich habe die Manpage durchgesehen und kann keinen Schalter dafür finden.
Ich gebe zu, das ist halb Neuheit, halb leichte Optimierung. Ich kann einfach nicht glauben, dass es keinen einfachen Weg gibt, dies zu tun. Ich muss etwas vermissen.
Antworten:
Slartibartfast ist auf dem richtigen Weg, aber das Standardverhalten von tar besteht darin, in Verzeichnisse zu gelangen, sodass Sie möglicherweise mehr als eine Kopie derselben Datei in der generierten tar-Datei erhalten. Sie können dies überprüfen, indem Sie Folgendes tun:
tar tf file.tar | sort
Die Problemumgehung besteht darin, die Option --no-recursion to tar einzuschließen. Außerdem sollten Sie in der Lage sein, seltsame Dateinamen einzusenden, indem Sie die-print0
Option zum Suchen und dann die--null
Option zum Tarieren verwenden. Das Endergebnis sieht so aus:find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -
Sie können die Reihenfolge in der TAR-Datei überprüfen, indem Sie verwenden
tar tsf tarfile.tar
. Obwohl Sie die Optionen -print0, -z und --null wahrscheinlich nie benötigen, es sei denn, Sie wissen, dass Sie auf einen Dateinamen mit einer darin eingebetteten neuen Zeile stoßen, habe ich es nie versucht.quelle
Die Reihenfolge der Dateien in der TAR-Datei spielt keine Rolle, da das Dateisystem die Reihenfolge beim Extrahieren der Dateien ohnehin nicht beibehält.
Es gibt keinen Schalter dafür, aber wenn Sie es wirklich wollten, könnten Sie tar eine Liste von Dateinamen in sortierter Reihenfolge zur Verfügung stellen und die tar-Datei in der Reihenfolge erstellen, in der Sie sie angeben.
quelle
tar tf tarfile | sort
Vorausgesetzt, Sie haben keine Dateien mit Zeilenumbrüchen im Namen:
Wenn das nicht funktioniert (habe es nie ausprobiert, daher weiß ich nicht - bedeutet stdin für das -T-Argument):
Dann ist da die Frage warum. Aber manchmal ist es einfacher, nicht zu fragen.
quelle
Pax ist sozusagen der POSIX-Nachfolger von cpio und tar und verschmilzt die besten Aspekte von beiden. Standardmäßig werden tar-Archive (ustar) geschrieben. Außerdem werden Medien automatisch durchsucht und abgefragt. Anschließend wird eine Zusammenfassung gedruckt.
quelle
Alternativ zu @ CharlieHerrons Antwort möchten Sie möglicherweise Ordner aus der
find
Ausgabe herausfiltern, wenn Sie nur Inhalte (Dateien, Symlinks) und Ordner-Metadaten (z. B. Ordnerberechtigungen, Mtime usw.) beibehalten möchten .quelle