Ecco uno script che puoi chiamare passando la modalità come primo argomento e uno o più nomi di directory come argomenti successivi. Sotto Linux, se non passi alcun nome di directory, sarà come se lo avessi passato .
(la directory corrente). Assegna un nome a questo script rchmodf
, rendilo eseguibile ( chmod a+rx /path/to/rchmodf
) e mettilo da qualche parte sul tuo $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Spiegazioni: mode=$1; shift
imposta la variabile mode
sul primo argomento dello script e rimuove quel primo argomento dall'elenco. "$@"
si espande nell'elenco di tutti gli argomenti.
Se lo desideri, puoi creare uno script che accetta sia una modalità directory che una modalità file.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Si noti che 744 non è una modalità file utile; 644 (scrivibili dall'utente e leggibili dal mondo) e 755 (anche eseguibili dal mondo) sono molto più comuni. Inoltre, modificare ogni file in un albero in modo che sia eseguibile o non eseguibile è raramente utile; probabilmente vorrai chiamare questo script con argomenti come +rX
(maiuscolo X
, per impostare il bit eseguibile solo per le directory e per i file che sono già eseguibili). In realtà, il X
modo simbolico è probabilmente quello che erano dopo con questi script: chmod -R +rX .
.
Con bash o zsh, c'è un altro modo di agire in modo ricorsivo ma solo nelle directory. Per bash, è necessaria la versione 4 e per eseguire shopt -s globstar
prima.
chmod a+rx **/*/
In zsh, si può agire sui file solo da suffisso (.)
: chmod a+r **/*(.)
.
Trasmetterò la domanda Nautilus.