Der einfachste Weg ist die Verwendung von ACL-Tools, auch wenn Sie keine ACLs verwenden. Rufen Sie einfach getfacl -R . >saved-permissions
an um die Berechtigungen eines Verzeichnisbaums zu sichern und setfacl --restore=saved-permissions
um sie wiederherzustellen.
Andernfalls können Sie Berechtigungen mit find -printf
sichern . (GNU find erforderlich, aber das haben Sie unter Linux.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Sie erhalten eine Datei, die Datensätze enthält, die durch ein Nullzeichen getrennt sind. Jeder Datensatz enthält die numerischen Berechtigungen, den Benutzernamen, den Gruppennamen und den Dateinamen für eine Datei. Zum Wiederherstellen durchlaufen Sie die Aufzeichnungen und rufen Sie chmod
auf und chown
. Die -depth
Option auf find
ist für den Fall, dass Sie einige Verzeichnisse unschreibbar machen wollen (Sie müssen zuerst deren Inhalt bearbeiten).
Sie können die Berechtigungen mit diesem Bash-Snippet wiederherstellen, das von einem von Daniel Alder beigesteuerten Snippet abgeleitet ist:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Sie können das folgende awk-Skript verwenden, um die find
umzudrehen Ausgabe in einen Shell-Code, um 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
Installieren Sie zuerst das ACL-Paket:
sudo apt-get install acl
Rekursiv speichern Berechtigungen und Eigentum an der Datei:
getfacl -R yourDirectory > permissions.acl
Wiederherstellen (relativ zum aktuellen Pfad):
setfacl --restore=permissions.acl