Como criar um arquivo com texto em cada subpasta?

0

Por exemplo, eu tenho uma hierarquia a/b/c . Como faço para criar um arquivo com o nome d.txt e texto "Hello World" em cada pasta a , a/b e a/b/c ?

    
por Olga Romanishyna 29.10.2018 / 20:48

2 respostas

2

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 que find 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.
por 29.10.2018 / 21:20
0

Tente

find . -type d -exec /bin/bash -c 'echo "Hello world" >'{}'/d.txt' \;

Espero que isso ajude

    
por 29.10.2018 / 21:11