GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo hacer un tar comprimido cuando hay demasiados nombres de archivo para que el shell se expanda en una sola línea?

Como una solución robusta, use find para separar los nombres de archivo por un carácter nulo y luego canalizar directamente a tar , que lee la entrada delimitada por nulos:

find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -

Esto ahora manejará todos nombres de archivos correctamente y tampoco está limitado por la cantidad de archivos.

Usando ls generar una lista de nombres de archivos para ser analizados por otro programa es un antipatrón común que debe evitarse siempre que sea posible. find puede generar una salida delimitada por nulos (-print0 ) que la mayoría de las utilidades pueden leer o analizar más. Dado que el carácter nulo es el único carácter que no puede aparecer en un nombre de archivo (y el / , obviamente), siempre estarás seguro con eso.


No, no puede agregar a un archivo tar comprimido sin descomprimirlo primero.

Sin embargo, tar puede aceptar su lista de archivos para procesar desde un archivo, por lo que solo puede hacer:

ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt

@slhck señala que la solución anterior no funcionará si hay espacios (y probablemente otros caracteres molestos) en sus nombres de archivo. Esta versión encierra cada nombre de archivo entre comillas dobles:

ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt

(Por supuesto, esto se romperá si tiene comillas dobles en sus nombres de archivo, en cuyo caso obtendrá lo que se merece. :)


Linux
  1. [Linux]:cómo excluir el directorio cuando se usa el comando de shell "tar"

  2. ¿Existen convenciones de nomenclatura para las variables en los scripts de Shell?

  3. ¿Cómo mostrar los caracteres de control (^c, ^d, ^[, …) de manera diferente en el Shell?

  4. ¿Cómo unirse a la siguiente línea cuando una línea coincide con una expresión regular para todo el documento en Vi?

  5. ¿Cómo hacer que la barra de actividades de Gnome Shell sea pequeña todo el tiempo?

Cómo hacer que sudo recuerde la contraseña por más tiempo

Cómo buscar archivos desde la línea de comandos de Linux

¿Cómo borrar el número de línea en Vim al copiar?

¿Cómo instalo/creo un aviso personalizado para el caparazón de pescado?

¿Cómo elimino la ruta completa al hacer una compresión tar.gz?

¿Cómo inicio un segundo shell cuando estoy en modo de usuario único?