Para un 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.
Probablemente también querrá ver --preserve-order
.
Con zsh
, en lugar de:
pax -w dir
Usar:
pax -dw dir dir/**/*(D)
Puedes hacer lo mismo con las versiones recientes de bash -O globstar -O dotglob
con:
pax -dw dir/**
O versiones recientes de FIGNORE='@(.|..)' ksh93 -o globstar
con:
pax -dw dir dir/**
pax
es el comando estándar para hacer tar
archivos La salida va a stdout. Los globos de conchas se ordenan por nombre.
Si se encuentra con una Lista de argumentos demasiado larga error, puede cambiar a:
printf '%s\0' dir dir/**/*(D) | pax -0dw
(no todos pax
soporte de implementaciones -0
aunque).
tar
por sí mismo no puede hacer esto, por lo que debe crearlo a partir de una lista ordenada correctamente. En principio, podría usar tar
de -T
opción, pero no hay forma de especificar que los nombres de archivo en esa lista deben terminar en NUL. Entonces, si tiene algún nombre de archivo con líneas nuevas (lo cual está permitido), esto simplemente se romperá.
Una mejor opción es usar cpio
para generar los archivos, ya que acepta una lista de nombres de archivo terminada en NUL y puede generar archivos tar.
Si su tar
el comando sería:
tar cvf /somedir/all.tar .
Luego, para que esto se ordene por nombre, tendría que hacer (suponiendo que GNU busque y cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Sin embargo, esto tiene la desventaja de que los subdirectorios se colocan entre los nombres de archivo. Puedes hacer trucos con find
s -printf0 especificando el directorio y la información de profundidad y ordenando con sort -n
pero eso también influye en cómo se ordenan los archivos con números dentro de un directorio.
Si lo anterior no es satisfactorio, probablemente podría usar un pequeño programa de python basado en os.walk()
para generar el orden que desea con control total (profundidad primero, en función de la extensión, etc.), pero si sigue esa ruta, también podría dejar cpio
y escribe el tar
archivo con tarfile
de python módulo.