La forma más fácil es usar las herramientas de ACL, incluso si en realidad no usa ACL. Simplemente llame a getfacl -R . >saved-permissions
para hacer una copia de seguridad de los permisos de un árbol de directorios y setfacl --restore=saved-permissions
para restaurarlos.
De lo contrario, una forma de respaldar los permisos es con find -printf
. (Se requiere búsqueda de GNU, pero eso es lo que tiene en Linux).
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Obtiene un archivo que contiene registros separados por un carácter nulo; cada registro contiene los permisos numéricos, el nombre de usuario, el nombre de grupo y el nombre de archivo para un archivo. Para restaurar, recorra los registros y llame a chmod
y chown
. El -depth
opción a find
es en caso de que desee hacer que algunos directorios no se puedan escribir (primero debe manejar su contenido).
Puede restaurar los permisos con este fragmento de bash derivado de un fragmento aportado por Daniel Alder:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
Puede usar el siguiente script awk para convertir el find
salida en algún código de shell para restaurar los permisos.
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
Primero instale el paquete ACL:
sudo apt-get install acl
almacenar recursivamente permisos y propiedad del archivo:
getfacl -R yourDirectory > permissions.acl
Restaurar (relativo a la ruta actual):
setfacl --restore=permissions.acl