Aqui está um script que você pode chamar passando o modo como o primeiro argumento e um ou mais nomes de diretório como argumentos subseqüentes. No Linux, se você não passar nenhum nome de diretório, será como se você tivesse passado .
(o diretório atual). Nomeie este script rchmodf
, torne-o executável ( chmod a+rx /path/to/rchmodf
) e coloque-o em algum lugar no seu $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Explanations: mode=$1; shift
define a variável mode
como o primeiro argumento do script e remove o primeiro argumento da lista. "$@"
se expande para a lista de todos os argumentos.
Se quiser, você pode criar um script que aceite tanto um modo de diretório quanto um modo de arquivo.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Note que o 744 não é um modo de arquivo útil; 644 (user-writable e world-readable) e 755 (também world-executable) são muito mais comuns. Além disso, alterar todos os arquivos em uma árvore para serem executáveis ou não executáveis raramente é útil; você provavelmente desejará chamar este script com argumentos como +rX
(capital X
, para definir o bit executável somente para diretórios e para arquivos que já são executáveis). De fato, o modo simbólico X
é provavelmente o que você estava procurando com esses scripts: chmod -R +rX .
.
Com bash ou zsh, existe outra maneira de agir recursivamente, mas apenas em diretórios. Para o bash, você precisa da versão 4 e executar shopt -s globstar
primeiro.
chmod a+rx **/*/
No zsh, você só pode atuar em arquivos sufixando (.)
: chmod a+r **/*(.)
.
Vou passar a questão do Nautilus.