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.