Per un tar
GNU :
--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.
Probabilmente vorrai anche guardare --preserve-order
.
Con zsh
, invece di:
pax -w dir
Usa:
pax -dw dir dir/**/*(D)
Puoi fare lo stesso con le versioni recenti di bash -O globstar -O dotglob
con:
pax -dw dir/**
O versioni recenti di FIGNORE='@(.|..)' ksh93 -o globstar
con:
pax -dw dir dir/**
pax
è il comando standard per creare tar
File. L'output va a stdout. I glob della shell sono ordinati per nome.
Se ti imbatti in un elenco Arg troppo lungo errore, puoi modificare in:
printf '%s\0' dir dir/**/*(D) | pax -0dw
(non tutti i pax
le implementazioni supportano -0
però).
tar
stesso non può farlo, quindi devi crearlo da un elenco correttamente ordinato. In linea di principio potresti quindi utilizzare tar
-T
di opzione, ma non c'è modo di specificare che i nomi di file in quell'elenco debbano terminare con NUL. Quindi, se hai nomi di file con caratteri di nuova riga (il che è consentito), questo si interromperà.
Un'opzione migliore è usare cpio
per generare i file in quanto accetta un elenco di nomi di file con terminazione NUL e può generare file tar.
Se il tuo tar
comando sarebbe:
tar cvf /somedir/all.tar .
Quindi per ordinare questo per nome dovresti fare (assumendo GNU find e cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Questo ha lo svantaggio però che le sottodirectory sono posizionate tra i nomi dei file. Puoi fare trucchi con find
s -printf0 specificando la directory e le informazioni di profondità e ordinando con sort -n
ma ciò influenza anche il modo in cui i file con i numeri vengono ordinati all'interno di una directory.
Se quanto sopra non è soddisfacente, probabilmente potresti usare un piccolo programma python basato su os.walk()
per generare l'ordinamento che desideri con il pieno controllo (prima la profondità, in base all'estensione ecc.), ma se segui questa strada potresti anche abbandonare cpio
e scrivi il tar
file con tarfile
di Python modulo.