Der einfachste Weg ist die Verwendung von ACL-Tools, auch wenn Sie nicht wirklich ACLs verwenden. Rufen Sie einfach getfacl -R . >saved-permissions
auf, um die Berechtigungen einer Verzeichnisstruktur zu sichern, und setfacl --restore=saved-permissions
, um sie wiederherzustellen.
Andernfalls ist eine Möglichkeit zum Sichern von Berechtigungen mit find -printf
. (GNU finden erforderlich, aber das ist, was Sie auf Linux.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Sie erhalten eine Datei Datensätze von einem Nullzeichen getrennt enthält; Jeder Datensatz enthält die numerischen Berechtigungen, den Benutzernamen, den Gruppennamen und den Dateinamen für eine Datei. Um die Daten wiederherzustellen, durchlaufen Sie die Datensätze und rufen Sie chmod
und chown
an. Die -depth
Option zu find
ist für den Fall, dass Sie einige Verzeichnisse nicht schreibbar machen möchten (Sie müssen zuerst ihren Inhalt behandeln).
Sie können die Berechtigungen mit diesem bash Ausschnitt aus einem von Daniel Alder beigetragen Schnipsel abgeleitet wiederherzustellen:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Sie die folgende awk-Skript verwenden, um die find
Ausgabe in eine Shell-Code zu drehen, die Berechtigungen wiederherzustellen.
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh
Sie haben es perfekt zusammengefasst. Ich werde das jetzt testen ... – NinjaCat