Si tar
utiliza un directorio de forma recursiva, solo utiliza el orden de los sistemas operativos readdir
.
Pero en algunos casos es bueno tar los archivos ordenados.
¿Cuál es una buena manera de tar un directorio ordenado alfabéticamente?
Tenga en cuenta que, a los fines de esta pregunta, gnu-tar en un sistema Linux típico está bien.
Respuestas:
Para un GNU
tar
:Probablemente también quieras mirar
--preserve-order
.fuente
--sort
se introdujo en la versión tar 1.28.--preserve-order
no es relevante para esta pregunta.tar: Exiting with failure status due to previous errors
errores. @mhsmithCon
zsh
, en lugar de:Utilizar:
Puede hacer lo mismo con versiones recientes de
bash -O globstar -O dotglob
with:O versiones recientes de
FIGNORE='@(.|..)' ksh93 -o globstar
con:pax
es el comando estándar para creartar
archivos. La salida va a stdout. Los globos de concha se ordenan por nombre.Si se encuentra con un error de lista Arg demasiado largo , puede cambiar a:
( aunque no todas las
pax
implementaciones son compatibles-0
).fuente
tar
en sí mismo no puede hacer esto, por lo que debe crearlo a partir de una lista ordenada correctamente. En principio, podría usartar
la-T
opción 's' , pero no hay forma de especificar que los nombres de archivo en esa lista se terminen con NUL. Entonces, si tiene nombres de archivo con nuevas líneas (lo que está permitido), esto simplemente se romperá.Una mejor opción es usarlo
cpio
para generar los archivos, ya que acepta una lista de nombres de archivo terminados en NUL y puede generar archivos tar.Si su
tar
comando fuera:Luego, para que esto se ordene por nombre, debe hacer (suponiendo que GNU find y cpio):
Sin embargo, esto tiene la desventaja de que los subdirectorios se colocan entre los nombres de archivo. Puede hacer trucos con
find
s -printf0 especificando el directorio y la información de profundidad y ordenando,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 basado en Python
os.walk()
para generar el orden que desee con control total (profundidad primero, basada en la extensión, etc.), pero si sigue esa ruta, también podría abandonarcpio
y escribir eltar
archivo con eltarfile
módulo de Python .fuente