
Digamos que eu tenha um diretório chamado /tmp/main
e dentro dele tenho outros 100 diretórios.
Quero executar um loop em cada diretório desses diretórios, por exemplo, para criar um arquivo comtouch test.txt
Como digo ao script para processar o primeiro, o segundo, o terceiro e assim por diante?
Responder1
Um loop simples funcionaria:
for dir in /tmp/main/*/; do
touch "$dir"/test.txt
done
O /
final do padrão /tmp/main/*/
garante que se o padrão corresponder a alguma coisa, ele corresponderá a um diretório.
Em bash
, você pode querer definir a nullglob
opção shell shopt -s nullglob
antes do loop para garantir que o loop não seja executado se o padrão não corresponder a nada. Sem nullglob
set, o loop ainda seria executado uma vez com o padrão não expandido em $dir
. Outra maneira de corrigir isso seria ter certeza de que $dir
é realmente um diretório antes de chamar touch
:
for dir in /tmp/main/*/; do
if [ -d "$dir" ]; then
touch "$dir"/test.txt
fi
done
ou equivalente,
for dir in /tmp/main/*/; do
[ -d "$dir" ] && touch "$dir"/test.txt
done
Responder2
Você pode usar find
:
find /tmp/main -type d -exec touch {}/test.txt \;
E se você quiser excluir a /tmp/main
pasta do retorno nos resultados de find
uso:
find /tmp/main ! -path /tmp/main -type d -exec touch {}/test.txt \;
ou
find /tmp/main -mindepth 1 -type d -exec touch {}/test.txt \;