2012-05-09 10 views
19

Estoy usando tar para realizar copias de seguridad diarias de un servidor y quiero evitar la copia de seguridad de/proc y/sys directorios del sistema, pero sin excluir ningún directorio llamado "proc" o "sys "en otro lugar en el árbol de archivos".tar exclude archivos/directorios únicos, no patrones

Por ejemplo, que tiene la siguiente árbol de directorios ("bla " ser archivos normales):

# find 
. 
./sys 
./sys/bla 
./foo 
./foo/sys 
./foo/sys/bla 

me gustaría excluir ./sys pero no ./foo/sys.

Me parece que no puede encontrar un patrón que hace que --exclude ...

# tar cvf /dev/null * --exclude=sys 
foo/ 

o ...

# tar cvf /dev/null * --exclude=/sys 
foo/ 
foo/sys/ 
foo/sys/bla 
sys/ 
sys/bla 

¿Alguna idea? (Linux Debian 6)

+0

¿Estás seguro de que no hay exclusión? Si está usando MAC OS, ¡es una historia diferente! Mira [aquí] (http://www.gnu.org/software/tar/manual/html_node/exclude.html#SEC108) – drinchev

+0

No estoy seguro de entender tu pregunta. Hay una opción '--exclude', pero no sé cómo hacer coincidir los nombres de archivo únicos y absolutos (no cualquier archivo con ese nombre) - vea mis ejemplos más arriba. –

+0

Mire aquí: http://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files-folders – paulsm4

Respuesta

8

Puede especificar rutas absolutas para el patrón de excluir, de esta manera se archivarán otros sys o proc directorios:

tar --exclude=/sys --exclude=/proc/
+2

Es cierto, pero el detalle importante acerca de esto es que el nombre del archivo excluido debe coincidir exactamente la notación reportada por el listado 'tar'. Para mi ejemplo, eso sería './Sys', como acabo de descubrir ahora. –

5

usando tar puede excluir directorios mediante la colocación de un fichero de etiquetas en cualquier directorio que deba omitirse

Crear archivos de etiqueta,

touch /sys/.exclude_from_backup 
touch /proc/.exclude_from_backup 

Entonces,

tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup * 
+2

Buena idea en teoría pero a menudo/sys y/proc no pueden escribirse. – pjv

6

En este caso es posible que desee utilizar:

--anchored --exclude=sys/\* 

porque en caso de que su alquitrán no muestra el líder "/" tiene un problema con el filtro.

+0

Esto hizo el truco para mí, ¡gracias! Quería excluir un directorio específico, no todos los directorios/subdirectorios que coinciden con el patrón. bsdtar no tiene la opción "--anchored", y con bsdtar podemos usar rutas completas para excluir carpetas específicas. –

+3

¡lo encontré! en bsdtar el delimitador es "^": 'bsdtar cvjf test.tar.bz2 --exclude miarchivo.avi --excluya"^myexcludedfolder "*' –