Com o zsh
shell:
echo Hello World > a{,/b{,/c}}/d.txt
Ou para todos os diretórios não ocultos que são encontrados aqui por meio de uma pesquisa recursiva:
dirs=(**/*(/))
echo Hello World > $^dirs/d.txt
Isso envolve um tee
interno para que a saída seja gravada em todos os arquivos ao mesmo tempo. Se houver um grande número de arquivos, você poderá se deparar com um número limitado de arquivos abertos, caso em que talvez queira gravar esse conteúdo em sequência, um arquivo por vez:
for d ($dirs) echo Hello World > $d/d.txt
O equivalente padrão seria algo como:
LC_ALL=C find . ! -name . \( -name '.*' -prune -o -type d -exec sh -c '
for dir do
echo Hello World > "$dir/d.txt"
done' sh {} + \)
-
LC_ALL=C
para que-name '.*'
corresponda em todos os arquivos que começam com.
, não apenas aqueles que começam com.
e são seguidos por uma sequência de caracteres válidos. -
! -name .
exclui o diretório atual, pois queremos apenas pastas sub (e também não queremos remover.
) -
-name '.*' -prune
, exclui arquivos ocultos e também evita quefind
desça para diretórios ocultos. -
-o
: se não ( ou ) -
-type d
seleciona apenas arquivos do tipo diretório . -
-exec sh -c 'inline-script' sh {} +
: passe a lista de diretivas correspondentes para um script in-line.