tar –exclude no excluye. ¿Por qué?

Pregunta:

Tengo esta línea muy simple en un script bash que se ejecuta con éxito (es decir, produciendo el archivo _data.tar ), excepto que no excluye los subdirectorios que se le dice que excluyan a través de la opción --exclude :

/bin/tar -cf /home/_data.tar  --exclude='/data/sub1/*'  --exclude='/data/sub2/*' --exclude='/data/sub3/*'  --exclude='/data/sub4/*'  --exclude='/data/sub5/*'  /data

En cambio, produce un archivo _data.tar que contiene todo en / data, incluidos los archivos de los subdirectorios que quería excluir.

¿Alguna idea de por qué? y como arreglar esto?

Actualización Implementé mis observaciones en función del enlace proporcionado en la primera respuesta a continuación (directorio 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 archivo _data.tar resultante.

Esto es desconcertante. Ya sea que se trate de un error en el tar actual (GNU tar 1.23, en un CentOS 6.2, Linux 2.6.32) o una "sensibilidad extrema" del tar a los espacios en blanco y otros errores tipográficos fáciles de pasar por alto, lo considero 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 veo 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á 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 sensibilidades tar --exclude no son de alquitrán 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 --exclude s) probó funcionar. Extraño pero tolerante.

¡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.

Respuesta:

Es posible que su versión de tar requiera que las opciones --exclude se coloquen al comienzo del comando tar .

Ver: https://stackoverflow.com/q/984204

tar --exclude='./folder' --exclude='./upload/folder2' \
    -zcvf /backup/filename.tgz .

Ver: http://mandrivausers.org/index.php?/topic/8585-multiple-exclude-in-tar/

tar --exclude=<first> --exclude=<second> -cjf backupfile.bz2 /home/*

Alternativa:

EXCLD='first second third'
tar -X <(for i in ${EXCLD}; do echo $i; done) -cjf backupfile.bz2 /home/*

Otro consejo de comando tar es de aquí :

tar cvfz myproject.tgz --exclude='path/dir_to_exclude1' \
                       --exclude='path/dir_to_exclude2' myproject

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım