Le moyen le plus simple consiste à utiliser les outils ACL, même si vous n'utilisez pas réellement les ACL. Appelez simplement getfacl -R . >saved-permissions
pour sauvegarder les permissions d'une arborescence de répertoires et setfacl --restore=saved-permissions
pour les restaurer.
Sinon, un moyen de sauvegarder les autorisations est avec find -printf
. (Recherche GNU requise, mais c'est ce que vous avez sous Linux.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Vous obtenez un fichier contenant des enregistrements séparés par un caractère nul; chaque enregistrement contient les autorisations numériques, le nom d'utilisateur, le nom de groupe et le nom de fichier pour un fichier. Pour restaurer, faites une boucle sur les enregistrements et appelez chmod
et chown
. Le -depth
option à find
est au cas où vous voudriez rendre certains répertoires non inscriptibles (vous devez d'abord gérer leur contenu).
Vous pouvez restaurer les autorisations avec cet extrait bash dérivé d'un extrait fourni par Daniel Alder :
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Vous pouvez utiliser le script awk suivant pour activer le find
sortie dans du code shell pour restaurer les autorisations.
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
Installez d'abord le package ACL :
sudo apt-get install acl
Stocker de manière récursive autorisations et propriété du fichier :
getfacl -R yourDirectory > permissions.acl
Restaurer (par rapport au chemin actuel) :
setfacl --restore=permissions.acl