Tengo esta línea muy simple en un script bash que se ejecuta con éxito (es decir, produce el _data.tar
archivo), excepto que no excluye los subdirectorios que se le dice excluir mediante la --exclude
opción:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
En su lugar, produce un _data.tar
archivo que contiene todo lo que se encuentra debajo de / data, incluidos los archivos en los subdirectorios que quería excluir.
¿Alguna idea de por qué? y como arreglar esto?
Actualización Implementé mis observaciones basadas en el enlace provisto en la primera respuesta a continuación (dir de nivel superior primero, sin espacios en blanco después de la última exclusión):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Pero eso no ayudó. Todos los subdirectorios "excluidos" están presentes en el _data.tar
archivo resultante .
Esto es desconcertante. Si esto es un error en el tar actual (GNU tar 1.23, en un CentOS 6.2, Linux 2.6.32) o "extrema sensibilidad" del tar a espacios en blanco y otros errores tipográficos fáciles de omitir, considero que esto es un error. Por ahora.
Esto es horrible : probé la información sugerida a continuación (sin seguimiento /*
) y todavía no funciona en el script de producción:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
No puedo ver ninguna diferencia entre lo que probé y lo que intentó @Richard Perrin, excepto por las comillas y 2 espacios en lugar de 1. Voy a intentar esto (debo esperar a que el script nocturno se ejecute como el directorio que se respaldará) arriba es enorme) e informar de nuevo.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Estoy empezando a pensar que todas estas tar --exclude
sensibilidades no son alquitranes sino algo en mi entorno, pero ¿qué podría ser eso?
¡Funcionó! La última variación probada (sin comillas simples y espacio simple en lugar de espacio doble entre las --exclude
s) probó el trabajo. Extraño pero aceptable.
¡Increíble! Resulta que una versión anterior de tar
(1.15.1) solo excluiría si el directorio de nivel superior es el último en la línea de comando. Esto es exactamente lo contrario de lo que requiere la versión 1.23. FYI.