Cómo hacer una copia de seguridad de la estructura de directorios ignorando archivos y directorios sin permiso de lectura

9

¿Alguna idea de cómo hacer una copia de seguridad de una estructura de directorio para la cual hay algunos archivos y / o directorios para los cuales no tiene permiso para leer? Me gustaría ignorarlos, sin que se bloquee la copia de seguridad (tar? Jar?).

usuario3228053
fuente

Respuestas:

8

El alquitrán de GNU tiene una opción --ignore-failed-readque hace justamente eso.

Si no está utilizando GNU tar, puede generar una lista de archivos para hacer una copia de seguridad o una lista de archivos para excluir. GNU find tiene un -readablepredicado que prueba si tiene permiso de lectura en el archivo. Con otras versiones de find, para quedarse findsolo, necesitará aproximar esto con los permisos de archivo ( -perm) y la propiedad ( -user, group), lo que hace que sea difícil lidiar con grupos, ACL, etc. Puede obtener una prueba precisa llamando al El programa externo o shell incorporado test. Aquí hay un ejemplo asumiendo que tartiene la opción -Xde leer una lista de nombres de archivo separados por una nueva línea para excluirlos (se omiten los nombres de archivo que contienen nuevas líneas, para evitar problemas de análisis):

find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .
Gilles 'SO- deja de ser malvado'
fuente
Funcionó perfectamente la primera vez con --ignore-failure-read, muchas gracias. El sistema era Red Hat, por lo que GNU alquitrán estaba en su lugar.
user3228053
2

Si no tiene líneas nuevas en las rutas, puede hacer esto:

find . -type f -readable -print | tar cf test.tar -T -

Esto puede estar limitado a GNU findy tarpuede no funcionar con ciertos sistemas de archivos (NFS, FUSE). Si hay o puede haber nuevas líneas, use en -print0lugar de -printfor findy agregue --nullfor tar.

Hauke ​​Laging
fuente