So sichern Sie die Verzeichnisstruktur, indem Sie Dateien und Verzeichnisse ohne Leseberechtigung ignorieren

9

Irgendwelche Ideen, wie Sie eine Verzeichnisstruktur sichern können, für die es einige Dateien und / oder Verzeichnisse gibt, für die Sie keine Leseberechtigung haben? Ich möchte diese einfach ignorieren, ohne dass das Backup (tar? Jar?) Abstürzt.

user3228053
quelle

Antworten:

8

Gnu Teer hat eine Option, --ignore-failed-readdie genau das tut.

Wenn Sie GNU tar nicht verwenden, können Sie entweder eine Liste der zu sichernden Dateien oder eine Liste der auszuschließenden Dateien erstellen. GNU find hat ein -readablePrädikat, das testet, ob Sie Leseberechtigung für die Datei haben. Bei anderen Versionen von find müssen findSie dies mit Dateiberechtigungen ( -perm) und Besitz ( -user, group) approximieren , um alleine zu bleiben. Dies macht es schwierig, mit Gruppen, ACLs usw. umzugehen. Sie können einen genauen Test erhalten, indem Sie aufrufen das eingebaute externe Programm oder die eingebaute Shell test. In diesem Beispiel wird davon ausgegangen, dass Sie tardie Möglichkeit haben -X, eine durch Zeilenumbrüche getrennte Liste der auszuschließenden Dateinamen zu lesen (Dateinamen mit Zeilenumbrüchen werden übersprungen, um Analyseprobleme zu vermeiden):

find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .
Gilles 'SO - hör auf böse zu sein'
quelle
Hat beim ersten Mal perfekt mit --ignore-failed-read funktioniert, vielen Dank. Das System war Red Hat, also war GNU-Teer vorhanden.
user3228053
2

Wenn die Pfade keine Zeilenumbrüche enthalten, können Sie dies tun:

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

Dies ist möglicherweise auf GNU beschränkt findund tarfunktioniert möglicherweise nicht mit bestimmten Dateisystemen (NFS, FUSE). Wenn es Zeilenumbrüche gibt oder geben kann, verwenden Sie -print0anstelle von -printfür findund fügen Sie --nullfür hinzu tar.

Hauke ​​Laging
quelle