¿Alguien tiene una herramienta o script que corrija recursivamente los permisos de archivo en un directorio?
En una máquina Ubuntu Linux, se copiaron un montón de archivos en un disco USB con permisos completos de 777 (usuario, grupo, otro: lectura, escritura, ejecución) por error. Quiero volver a ponerlos en el directorio del usuario corregido.
Los directorios deben ser 775 y todos los demás archivos pueden ser 664. Todos los archivos son imágenes, documentos o MP3, por lo que ninguno de ellos debe ser ejecutable. Si el bit de directorio está configurado, entonces necesita ejecución, de lo contrario solo necesita usuario y grupo, lectura y escritura.
Pensé que valía la pena comprobar si existe tal utilidad antes de hackear un script de shell :)
fuente
Respuestas:
Esto debería funcionar:
fuente
find puede hacer el truco solo con -exec:
para evitar que find genere un chmod para cada entrada:
(esto efectivamente llama a chmod una vez con la lista de todos los archivos como parámetros en lugar de un chmod por archivo)
fuente
Esta respuesta no resolverá su problema, pero alguien podría encontrarlo útil para un problema similar en el que los archivos tienen menos permiso del que deberían.
La magia es el permiso X, en lugar de x. La página de manual de chmod lo describe así:
Esto no es adecuado en su caso, ya que sus archivos tienen permiso de ejecución, por lo que coincidirá con la segunda prueba.
fuente
Hice un script con la solución de freiheit, agrega comprobación básica de argumentos.
fuente
chmod: missing operand after ‘0644’
. ¿Puedo sugerir envolver las declaraciones de búsqueda con una comprobación para ver si existe el objetivo?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
En caso de que esté usando ssh, es una buena idea no modificar los
~/.ssh
permisos.fuente
El otro día hice un script bash realmente simple porque necesitaba arreglar los permisos. ¿Por qué no hay una utilidad formal para restablecer los permisos básicos, no root, de archivos y carpetas?
El script usa find para 755 todas las carpetas y 644 bibliotecas. Luego prueba cada archivo con readelf para ver si tiene un encabezado binario elf. Si no, escanea los dos primeros caracteres en busca de shebang
#!
. Es 755 esas instancias y 644 todo lo demás después de comprobar si el archivo ya tiene el permiso correspondiente.Los casos especiales se manejan con una excepción como los
*.bak
archivos que se ignorarán.fuente
Encontré una solución simplificada de C-shell. Esto podría no ser completamente infalible, pero debería funcionar para la mayoría de los directorios. Asume que el comando 'archivo' de Unix funciona y encuentra archivos exec para restablecerlos a los permisos de ejecución:
fuente
Una alternativa, que no responde exactamente a la solicitud original, pero es más probable lo que pretende el OP, es especificar los permisos simbólicamente. Por ejemplo, supongo que OP quiere "eliminar el acceso de escritura para el público y eliminar el permiso ejecutable de todos los archivos".
Esto es posible si utiliza la representación de permiso simbólico.
Al escribirlo de esta manera, en lugar de configurar explícitamente "0664", evita accidentalmente permitir permisos adicionales a los archivos que anteriormente estaban bloqueados. Por ejemplo, si un archivo era 0770, no se convertirá en 0664 por error.
Para hacer el primer requisito, puede usar
chmod
:Para hacer el segundo requisito:
O para hacer ambas cosas:
fuente