Como criar o mesmo arquivo em todos os subdiretórios?

Como criar o mesmo arquivo em todos os subdiretórios?

Tenho muitos subdiretórios existentes, como:

/path/to/my/subs/a
/path/to/my/subs/b
/path/to/my/subs/c

Não, quero criar um novo arquivo em cada um deles. O nome do arquivo é constante, como:

/path/to/my/subs/a/foo.md
/path/to/my/subs/b/foo.md
/path/to/my/subs/c/foo.md

Como eu faço isso? Eu esperava que touch /path/to/my/subs/*/foo.mdisso acontecesse, mas ele dissetouch: /path/to/my/subs/*/foo.md: No such file or directory

Responder1

Supondo que você use bashcomo seu shell, use a expansão de chaves.

touch /path/to/my/subs/{a,b,c}/foo.md

Responder2

Você pode usar o findutilitário:

find /path/to/my/subs -type d -links 2 -exec touch "{}/foo.md" \;

Isso percorrerá toda a árvore começando em subs, localizará os diretórios folha (terminal) e tocará em um arquivo foo md lá.

Você também pode omitir a parte "-exec"... e usar xargspara criar os arquivos todos juntos no final, gerando menos touchbinários, ou usar um único toque:

touch $( find /path/to/my/subs -type d -links 2 | sed -e 's#$#/foo.md#g' )

A findparte obterá os diretórios e sedos transformará nos nomes de arquivo apropriados.

Se você tiver uma única camada de diretórios:

para diretório em /caminho/para/meus/subs/*; toque em $dir/foo.md ; feito

informação relacionada