Comment sauvegarder la structure des répertoires en ignorant les fichiers et les répertoires sans autorisation de lecture

9

Avez-vous des idées pour sauvegarder une structure de répertoires pour laquelle il existe des fichiers et / ou des répertoires pour lesquels vous n'êtes pas autorisé à lire? Je voudrais simplement les ignorer, sans que la sauvegarde (tar? Jar?) Ne plante.

user3228053
la source

Réponses:

8

Gnu tar a une option --ignore-failed-readqui fait exactement cela.

Si vous n'utilisez pas GNU tar, vous pouvez soit générer une liste de fichiers à sauvegarder, soit une liste de fichiers à exclure. GNU find a un -readableprédicat qui teste si vous avez l'autorisation de lecture sur le fichier. Avec d'autres versions de find, pour rester findseul, vous devrez approximer cela avec les autorisations de fichier ( -perm) et la propriété ( -user, group), ce qui rend difficile la gestion des groupes, des ACL, etc. Vous pouvez obtenir un test précis en appelant le programme externe ou le shell intégré test. Voici un exemple en supposant que vous avez tarla possibilité -Xde lire une liste de noms de fichiers séparés par des sauts de ligne à exclure (les noms de fichiers contenant des sauts de ligne sont ignorés pour éviter les problèmes d'analyse):

find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .
Gilles 'SO- arrête d'être méchant'
la source
A parfaitement fonctionné la première fois avec --ignore-failed-read, merci beaucoup. Le système était Red Hat donc le tar GNU était en place.
user3228053
2

Si vous n'avez pas de nouvelle ligne dans les chemins, vous pouvez le faire:

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

Cela peut être limité à GNU findet tarpeut ne pas fonctionner avec certains systèmes de fichiers (NFS, FUSE). S'il y a ou peut y avoir des retours à la ligne, utilisez -print0plutôt -printfor findet ajoutez --nullfor tar.

Hauke ​​Laging
la source