Script para verificar recursivamente los permisos y los propietarios de un directorio y escribir un script de shell para recrearlos

Script para verificar recursivamente los permisos y los propietarios de un directorio y escribir un script de shell para recrearlos

Estoy intentando escribir un script de shell para preservar y reescribir todos los permisos/grupos en un directorio grande con varios subdirectorios en caso de que se cambien o no se creen correctamente o si se reflejan los usuarios/permisos para este directorio en una máquina diferente.

Algo como:

chown adam:brown /var/blarg
chmod 770 /var/blarg
chown adam:brown /var/blarg/toast.file
chmod 777 /var/blarg/toast.file

...etc

Hacer esto a mano llevará mucho tiempo. Me preguntaba si existe algún comando/script para realizar esta tarea.

Respuesta1

Siguiendo la línea del comentario de @yeti, pensé en esto hace un tiempo y creo recordar haber llegado a la conclusión de que algo como

find /path/to/dir -printf '%m\t%u\t%g\t%p\0' > filelist

y luego

while read -rd $'\0' perms user group file; do 
  if [ -e "$file" ]; then
    chown "$user:$group" "$file"
    chmod "$perms" "$file"
  else
    echo "warning: $file not found"
  fi
done < filelist

trabajaría. Poner el nombre del archivo al final en la salida y usar readterminadores nulos en lugar de nuevas líneasdeberíahágalo seguro incluso para nombres de archivos con espacios y otros caracteres especiales. Dependiendo de dónde desee ejecutar el segundo comando, puede ser más conveniente usar el nombre del archivo sin el /path/to/dircomponente principal del findcomando, es decir, %Pen lugar de %p.

Respuesta2

Como sugirió Yeti en los comentarios, utilicé el comando de búsqueda para buscar todos los archivos y directorios dentro del directorio y generar sus permisos/propietarios en un comando chown o chmod. Agregué la -vopción detallada para que al ejecutar los scripts de shell resultantes puedas ver el éxito/errores de los comandos:

find /var/blarg -printf 'chown -v %u:%g %p\n' > chowns.sh
find /var/blarg -printf 'chmod -v %m %p\n' > chmods.sh

Ahora simplemente haga ejecutables los archivos .sh resultantes:

chmod +x chowns.sh; chmod +x chmods.sh

Luego ejecútelos y envíe los comentarios detallados a un archivo txt:

./chmods > chmods_results.txt

Auge.

Respuesta3

Mencionas events, y si tienesen realidadmuchos archivos tiene sentido estar atento a estos. Es posible que desee echar un vistazo a inotifywatch, que "escucha eventos del sistema de archivos", por ejemplo, cambios en los permisos de los archivos. En el sistema operativo basado en Debian reside en el paquete inotify-tools.

información relacionada