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 esse 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" {} +
Explicações: mode=$1; shift
define a variável mode
para o primeiro argumento do script e remove esse primeiro argumento da lista. "$@"
expande para a lista de todos os argumentos.
Se desejar, você pode criar um script que aceite os modos de diretório e 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" {} +
Observe que 744 não é um modo de arquivo útil; 644 (gravável pelo usuário e legível pelo mundo) e 755 (também executável pelo mundo) 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 esse script com argumentos como +rX
(capital X
, para definir o bit executável apenas para diretórios e arquivos que já são executáveis). Na verdade, o X
modo simbólico é provavelmente o que você estava atrás com esses scripts: chmod -R +rX .
.
Com o bash ou o zsh, há outra maneira de agir recursivamente, mas apenas em diretórios. Para o bash, você precisa da versão 4 e para executar shopt -s globstar
primeiro.
chmod a+rx **/*/
Em zsh, você pode agir sobre arquivos somente por sufixação (.)
: chmod a+r **/*(.)
.
Vou passar a pergunta do Nautilus.