Für ein GNU tar :
--sort=ORDER
Specify the directory sorting order when reading directories.
ORDER may be one of the following:
`none'
No directory sorting is performed. This is the default.
`name'
Sort the directory entries on name. The operating system may
deliver directory entries in a more or less random order, and
sorting them makes archive creation reproducible.
`inode'
Sort the directory entries on inode number. Sorting
directories on inode number may reduce the amount of disk
seek operations when creating an archive for some file
systems.
Sie werden sich wahrscheinlich auch --preserve-order ansehen wollen .
Mit zsh , statt:
pax -w dir
Verwendung:
pax -dw dir dir/**/*(D)
Sie können dasselbe mit neueren Versionen von bash -O globstar -O dotglob tun mit:
pax -dw dir/**
Oder neuere Versionen von FIGNORE='@(.|..)' ksh93 -o globstar mit:
pax -dw dir dir/**
pax ist der Standardbefehl, um tar zu erstellen Dateien. Die Ausgabe geht nach stdout. Shell-Globs werden nach Namen sortiert.
Wenn Sie auf eine Arg-Liste zu lang stoßen Fehler, können Sie ändern zu:
printf '%s\0' dir dir/**/*(D) | pax -0dw
(nicht alle pax Implementierungen unterstützen -0 obwohl).
tar selbst kann dies nicht, also müssen Sie es aus einer korrekt geordneten Liste erstellen. Im Prinzip könnten Sie dann tar verwenden ist -T Option, aber es gibt keine Möglichkeit anzugeben, dass die Dateinamen in dieser Liste NUL-terminiert sein sollen. Wenn Sie also Dateinamen mit Zeilenumbrüchen haben (was erlaubt ist), wird dies einfach brechen.
Eine bessere Option ist die Verwendung von cpio um die Dateien zu generieren, da dies eine NUL-terminierte Liste von Dateinamen akzeptiert und tar-Dateien generieren kann.
Wenn Ihr tar Befehl wäre:
tar cvf /somedir/all.tar .
Damit dies nach Namen sortiert werden kann, müssten Sie Folgendes tun (unter der Annahme von GNU find und cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Dies hat jedoch den Nachteil, dass Unterverzeichnisse zwischen Dateinamen platziert werden. Mit find kannst du Tricks machen s -printf0 Angabe des Verzeichnisses und der Tiefeninformationen und Sortierung mit sort -n aber das beeinflusst auch, wie Dateien mit Nummern innerhalb eines Verzeichnisses sortiert werden.
Wenn das obige nicht zufriedenstellend ist, könnten Sie wahrscheinlich ein kleines Python-Programm verwenden, das auf os.walk() 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 cpio genauso gut löschen und schreiben Sie die tar aus Datei mit Pythons tarfile Modul.