GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo tar archivos con un orden ordenado?

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.


Linux
  1. Cómo cifrar archivos con gocryptfs en Linux

  2. Cómo gzip un directorio en Linux

  3. ¿Cómo encontrar todos los archivos con un directorio principal en particular en Linux?

  4. ¿Cómo eliminar archivos ._ en un directorio? ubuntu

  5. ¿Cómo excluir archivos del archivo TAR usando expresiones regulares?

Cómo contar archivos en el directorio en Linux

Cómo tar tipos de archivos específicos (extensiones) en un directorio

Cómo contar archivos en el directorio en Linux

Primeros pasos con el comando Tar

Cómo subir archivos con FileZilla

¿Cómo cambiar el nombre de todos los archivos con caracteres especiales y espacios en un directorio?