Aquí hay un script que puede llamar pasando el modo como primer argumento y uno o más nombres de directorio como argumentos posteriores. En Linux, si no pasa ningún nombre de directorio, será como si hubiera pasado .
(el directorio actual). Asigne un nombre a este script rchmodf
, hágalo ejecutable ( chmod a+rx /path/to/rchmodf
) y colóquelo en algún lugar de su $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Explicaciones: mode=$1; shift
establece la variable mode
en el primer argumento de la secuencia de comandos y elimina ese primer argumento de la lista. "$@"
se expande a la lista de todos los argumentos.
Si lo desea, puede crear un script que acepte tanto un modo de directorio como un modo de archivo.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Tenga en cuenta que 744 no es un modo de archivo útil; 644 (escribible por el usuario y legible por el mundo) y 755 (también ejecutable por el mundo) son mucho más comunes. Además, cambiar cada archivo en un árbol para que sea ejecutable o no ejecutable rara vez es útil; probablemente desee llamar a este script con argumentos como +rX
(mayúscula X
, para establecer el bit ejecutable solo para directorios y para archivos que ya son ejecutables). De hecho, el X
modo simbólico es probablemente lo que fueron después con estos guiones: chmod -R +rX .
.
Con bash o zsh, hay otra forma de actuar de forma recursiva pero solo en directorios. Para bash, necesitas la versión 4 y ejecutar shopt -s globstar
primero.
chmod a+rx **/*/
En zsh, puede actuar sobre los archivos sólo sufijando (.)
: chmod a+r **/*(.)
.
Pasaré la pregunta de Nautilus.