Al empaquetar archivos (que no es lo mismo que comprimir), puede que nos encontremos en el dilema de que queramos crear un archivo tar de una carpeta (y subcarpetas) excluyendo algunos archivos, ya bien sea por el nombre, o con una expresión regular.
Para eso existen un par de configuraciones en la ejecución de línea de comandos al crear archivos .tar que nos permiten realizar este tipo de acciones. Vamos a ver las dos formas para que no tengamos dudas.
Crear un archivo .tar excluyendo archivos en concreto
Para este primer caso supongamos que tenemos la carpeta /var/copiar y dentro de esta carpeta tenemos la siguiente estructura
- /var/copiar/
- /var/copiar/archivo
- /var/copiar/otroarchivo
- /var/copiar/subcarpeta/
- /var/copiar/subcarpeta/subsub
- /var/copiar/subcarpeta/archivo3
Y supongamos también que aparte de estos que indico tenemos muchas otras subcarpetas y archivos.
Lo que queremos hacer es copiar todo el contenido de la carpeta copiar y empaquetarlo en backup.tar.gz pero no queremos que se guarde el archivo3 ni el otroarchivo. El comando que ejecutaríamos tendría el comando –exclude que será el que nos permitirá indicar un archivo a excluir, por tanto para dos archivos quedaría así:
tar -zcvf /var/backup.tar.gz --exclude='otroarchivo' --exclude='archivo3' /var/copiar
De esta forma podemos añadir varios archivos o uno solo, los que queramos en la misma línea para evitar que se empaqueten.
Crear un archivo .tar excluyendo archivos por expresion regular y coincidencia
Esto es más complejo, o sencillo según se mire, por que simplemente pasa por crear un archivo (txt por ejemplo) en el que indicaremos las reglas a seguir que luego cargaremos con el comando -X. Por tanto imaginemos que dentro de la rama de carpetas que hemos visto antes, no queremos empaquetar ningún archivo de los anteriores (otroarchivo y archivo3), pero además queremos evitar que se añadan los archivos de log (suponemos que todos en distintas carpetas se llaman error_log y access_log).
Crearemos un archivo con el comando nano que tanto me gusta:
nano exclude.txt
y le agregaremos este contenido:
otroarchivo archivo3 *_log
De esta forma va a omitir el archivo3, otroarchivo y cualquier archivo que termine en _log (se pueden poner por ejemplo cache* para evitar guardar cualquier carpeta cache y cosas por el estilo). El límite con esto ya depende de tus necesidades.
El comando a ejecutar sería el siguiente
tar -zcvf /var/backup.tar.gz -X exclude.txt /var/copiar
tenemos en cuenta que si cambiamos el nombre del archivo tendremos que cargar el que toca.
Con estos simples pasos crearemos nuestro paquete sin los archivos que no nos interesen.