Wenn Sie tar
ein Verzeichnis rekursiv erstellen, wird nur die Reihenfolge aus dem Betriebssystem verwendet readdir
.
Aber in einigen Fällen ist es schön, die Dateien sortiert zu tarieren.
Was ist ein guter Weg, um ein alphabetisch sortiertes Verzeichnis zu tarieren?
Beachten Sie, dass für die Zwecke dieser Frage gnu-tar auf einem typischen Linux-System in Ordnung ist.
Antworten:
Für eine GNU
tar
:Sie werden wahrscheinlich auch schauen wollen
--preserve-order
.quelle
--sort
wurde in tar version 1.28 eingeführt.--preserve-order
ist für diese Frage nicht relevant.tar: Exiting with failure status due to previous errors
Fehler. @mhsmithMit
zsh
statt:Verwenden:
Sie können dasselbe mit aktuellen Versionen von
bash -O globstar -O dotglob
with tun :Oder aktuelle Versionen von
FIGNORE='@(.|..)' ksh93 -o globstar
mit:pax
ist der Standardbefehl zum Erstellen vontar
Dateien. Die Ausgabe geht an stdout. Shell-Globs werden nach Namen sortiert.Wenn Sie auf einen zu langen Fehler in der Arg-Liste stoßen, können Sie zu Folgendem wechseln:
(Nicht alle
pax
Implementierungen unterstützen-0
jedoch).quelle
tar
selbst kann dies nicht, daher müssen Sie es aus einer korrekt geordneten Liste erstellen. Im Prinzip könnte man dann verwendentar
‚s-T
Option, aber es gibt keine Möglichkeit, festzulegen , dass die Dateinamen in dieser Liste sollen beendet werden NUL. Wenn Sie also Dateinamen mit Zeilenumbrüchen haben (was zulässig ist), wird dies nur unterbrochen.Eine bessere Option ist das
cpio
Generieren der Dateien, da diese eine NUL-terminierte Liste von Dateinamen akzeptieren und TAR-Dateien generieren können.Wenn Ihr
tar
Befehl wäre:Damit dies nach Namen sortiert werden kann, müssten Sie Folgendes tun (unter der Annahme von GNU find und cpio):
Dies hat jedoch den Nachteil, dass Unterverzeichnisse zwischen Dateinamen platziert werden. Sie können Tricks mit
find
s -printf0 ausführen, indem Sie die Verzeichnis- und Tiefeninformationen angeben und mit sortieren. Diessort -n
beeinflusst jedoch auch, wie Dateien mit Nummern innerhalb eines Verzeichnisses sortiert werden.Wenn das oben
os.walk()
Genannte nicht zufriedenstellend ist, können Sie wahrscheinlich ein kleines Python-Programm verwenden, das auf basiert , um die gewünschte Reihenfolge mit voller Kontrolle zu generieren (Tiefe zuerst, basierend auf Erweiterung usw.), aber wenn Sie diesen Weg gehen, können Sie das auch fallen lassencpio
und ausschreibentar
Datei mit Python-tarfile
Modul.quelle