¿No funciona chmod -R?

Cuando alguna vez hemos tenido que cambiar los permisos a los ficheros de una carpeta y de las subcarpetas incluidas de forma recursiva, hemos usado por ejemplo el comando chmod -R 755 y ha funcionado perfectamente. Sin embargo, si tratamos de hacer los mismo seleccionando a qué tipo de ficheros queremos hacer el cambio con el comando chmod -R 755 *.php nos encontramos con que no funciona, que el comando no nos da error, pero solo cambia los ficheros de la carpeta actual, no lo hace sobre los ficheros con esa extensión incluidos en carpetas dentro del directorio.
Realmente no es un error, simplemente funciona así, pero como para todo hay arreglo, la forma de conseguir lo que queremos es combinando los comando find y chmod de la forma siguiente:
find . -type f -name '*.php' -exec chmod 755 {} \;
Con este comando buscamos (find) en el directorio actual (el .) todos los ficheros (-type f) que tienen extensión php (‘*.php’), y la lista recuperada la dirigimos (-exec) hacia el comando chmod, que la recibe en {}. El \; final solamente es para indicar que se acaba la orden.
Parece un comando complicado, pero cuando entiendes qué hace cada cosa resulta más fácil de recordar.
En esta entrada hay un ejemplo algo más complicado, que sirve para cuando queremos cambiar los permisos solamente a aquellos ficheros que tienen ya unos permisos determinados, por ejemplo cambiar al permiso 755 a aquellos ficheros que en ese momento tienen permisos 777.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *