¿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?

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.


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.

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.