¿Cómo excluir archivos del archivo TAR utilizando expresiones regulares?

10

Tengo una pregunta simple, pero no puedo encontrar ni resolver la respuesta. Quiero hacer un archivo tar, pero quiero excluir algunos archivos de él usando expresiones regulares.

Ejemplo del archivo a excluir es este: 68x640X480.jpg

He intentado esto sin suerte:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

¿Alguien puede ayudar?

Frodik
fuente

Respuestas:

11

Puede usar algunas herramientas adicionales como findy egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

El inconveniente del método mencionado anteriormente es que no funcionará para todos los nombres de archivo posibles. Otra oportunidad es utilizar la funcionalidad de exclusión incorporada de tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

Lamentablemente, el segundo método no funciona con expresiones regulares, sino solo con comodines.

Vladimir Blaskov
fuente
Gracias, esto es lo que estaba buscando. ¿Puede hacer una nota sobre qué nombres de archivo no funcionarían? por ejemplo, que contiene qué caracteres?
Frodik
No debe preocuparse demasiado por eso: la mayoría de los nombres de archivos funcionan perfectamente con esa solución. El problema es que los nombres de archivo UNIX / Linux pueden incluir casi todo, incluso caracteres de control, tales combinaciones oscuras no funcionarán con la primera solución.
Vladimir Blaskov
Una buena lectura relacionada con los nombres de archivos UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Quizás deberías probar cpio

http://cybertiggyr.com/cpio-howto

Se lee de la lista de archivos y hace el archivo. Puede generar una lista de archivos usando sed como se muestra a continuación.

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Luego puede usarlo como entrada para cpio.

nitinas
fuente