Se você estiver usando o bash ≥4 ou zsh ou ksh93 ≥o + 1 , você pode fazer o shell fazer globalização recursiva: o curinga **/
corresponde aos diretórios em qualquer profundidade. No bash, você precisa habilitar o recurso com shopt -s globstar
(bash), e cuidado que até bash 4.2, **/
atravessa links simbólicos para diretórios. Em ksh93, você precisa de set -o globstar
(ksh93); em zsh, está sempre ativado.
for x in **/*.txt; do …
Se você precisar que seu script seja portável para outros shells, use O comando find
é exatamente a ferramenta certa para o trabalho. Observe que find
é um comando externo que pode funcionar de duas maneiras: pode gerar uma lista de arquivos e executar comandos para cada arquivo. Se você quiser executar um comando para cada arquivo, use -exec
:
find . -type f -name '*.txt' -exec chmod a+r {} +
1 Entre os shells não-Bourne, fish
e tcsh
também têm o recurso