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