Tar una lista de archivos que no todos existen


10

Estoy ejecutando un comando de un script como

tar -c -f ar.tar a b c d

donde b, cyd pueden no existir, y pueden ser directorios. Las soluciones que se me ocurrieron son canalizar la salida de ls -da grep, luego empalmarlo en el tarcomando o activar globos extendidos para @(a|b|c|d).

¿Hay una manera más ordenada de hacer esto? Estoy en Debian Wheezy, que no parece tener un --includeparámetro.


¿Tienes --ignore-failed-readopción?
Costas

1
Probé, todavía dio un error para los archivos que no existen en absoluto.
gidyn

1
Sí, el mensaje de error está presente pero se crea el archivo.
Costas

Respuestas:


8

puedes probar

 tar cf ar.tar $(ls a b c d )

dónde

  • c para crear
  • f ar.tar especificar archivo tar

  • $(ls a b c d) enumerará a stdin qué archivo está realmente presente (y dará error para otro)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)funciona perfectamente ... pero creo que es más limpio con extglob
gidyn

ahora estoy transfiriendo el guión al guión, así que no extglob, estoy usando el código en mi comentario anterior
gidyn el

1

Si está bien tener la ruta completa de los archivos en el archivo tar, puede hacer:

tar -c -f ar.tar $(readlink -e a b c d)

La -eopción de readlink canonicalizará los nombres de archivo existentes e ignorará silenciosamente cualquier otro.


Supongo que eso podría funcionar si --strip-componentsextraigo.
gidyn

0

Utilizar

find path/to/dir -name "*.ext1" -o -name "*.ext2"

Explicación

  1. El primer parámetro es el directorio que desea buscar.
  2. Por defecto findhace recursividad.
  3. Los -osoportes para -or. Así que arriba significa buscar este comodín O este. Si solo tiene un patrón, no es necesario -o.
  4. Las comillas alrededor del patrón comodín son obligatorias.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.