GNU/Linux >> Tutoriales Linux >  >> Linux

Usar find y tar con archivos con caracteres especiales en el nombre

Usa el -T característica de tar para indicarle que lea la lista de archivos de otro archivo (tar trata cada línea como un archivo separado).

A continuación, puede utilizar <() notación para que su shell genere un pseudo-archivo a partir de la salida de un comando:

tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")

Si su shell no es compatible con <() notación, puede usar un archivo temporal:

find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list

Puede usar la función -print0 de find con la función -0 de xargs, así:

find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar

-print0 (eso es guión-impresión-cero) le dice a find que use un valor nulo como delimitador entre rutas en lugar de espacios, y -0 (eso es guión cero) le dice a xargs que espere lo mismo.

Editado para agregar:

Si tiene una gran cantidad de archivos, xargs puede invocar tar más de una vez. Vea los comentarios para conocer las formas de lidiar con eso, o haga que find invoque tar directamente, como este, que funciona con cualquier cantidad de archivos, incluso si tienen espacios o saltos de línea en sus nombres:

rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +

Cuando el argumento que sigue a "-T" es "-", la lista de archivos se toma de stdin. Las versiones recientes de tar suelen admitir la opción "-null", que indica que los archivos proporcionados en la fuente especificada por "-T " Las opciones están separadas por valores nulos.

Por lo tanto, lo siguiente funciona con un número arbitrario de archivos, que posiblemente contengan caracteres de nueva línea:

find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar

Linux
  1. ¿Cómo comprimir y extraer archivos usando el comando tar en Linux?

  2. busque y elimine archivos con espacio usando el comando de búsqueda en Linux

  3. Encuentra todos los archivos con un nombre que contenga una cadena

  4. Eliminar archivos con rm usando find y xargs

  5. Cómo combinar el comando 'tar' con 'buscar'

Cómo encontrar archivos en Linux con el comando Buscar

Cómo encontrar archivos usando la línea de comandos en la terminal de Linux

Cómo encontrar archivos con el comando fd en Linux

Usando el comando tr en Linux para jugar con personajes

Encuentre archivos con caracteres de Windows ilegales en el nombre en Linux

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