Escribí un script para cambiar los permisos de todos los archivos en un directorio:
#!/bin/bash
files=`find "$1"`
for f in $files; do
chown "$2" "$f"
chmod 600 "$2"
done
Obviamente, el segundo argumento de chmod debería ser "$f"
en lugar de "$2"
. Sin embargo, cuando ejecuté el script (en un directorio pequeño) también olvidé incluir el segundo argumento, que debería haber sido "dave:dave"
. Ahora, todos los archivos del directorio están completamente desordenados:
~ $ ll Documents/
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ? ? modules.txt
-????????? ? ? ? ? ? packages.txt
-????????? ? ? ? ? ? todo.txt
-????????? ? ? ? ? ? wiki.txt
Se ejecuta sudo chown dave:dave Documents/*
y sudo chmod 600 Documents/*
no arroja errores, pero los archivos permanecen sin cambios. Sé que puedo convertir sudo cat
cada archivo en un archivo nuevo, pero tengo curiosidad por saber cómo arreglar los permisos en los archivos originales.
Respuesta1
Además de las respuestas dadas en los comentarios, también debe tener en cuenta que su secuencia de comandos se interrumpirá en cualquier nombre de archivo que tenga espacios.
Puede hacer todo esto con un solo comando usando find
, en lugar de intentar analizar una lista de nombres de archivos generados por find
. Mucho más robusto; maneja nombres de archivos independientemente de los caracteres especiales o espacios en blanco.
find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;
Tenga en cuenta que si chown
falla en un archivo determinado, chmod
no se ejecutará en ese archivo. Probablemente ese sea el comportamiento que deseas de todos modos.
Como ya ejecutó un comando erróneo que eliminó los permisos de ejecución de su directorio "Documentos", debe volver a agregar permisos de ejecución:
chmod u+x Documents
Si hay más directorios a los que se les quitaron permisos de ejecución por error, debería poder solucionarlos con:
find Documents -type d -exec chmod u+x {} \;
Sin embargo, no creo que necesites esto, ya que una vez que se eliminaron los permisos de ejecución de "Documentos", no se podrá acceder a ninguno de sus subdirectorios, por lo que no se habrán eliminado los permisos de ejecución.
Respuesta2
La única vez que vi archivos con permisos tan extraños, fue en unen seriosistema de archivos en mal estado. Una ronda de fsck(8)
reformas hizo que muchos de ellos volvieran a una relativa normalidad, pero muchos todavía estaban muy corruptos. Creo que se debió a un problema de hardware (saqué los archivos buenos del disco y los tiré).