たとえば、階層がありますa/b/c
。各フォルダにd.txt
名前とテキストを含むファイルを作成するには?"Hello World"
a
a/b
a/b/c
答え1
シェルを含むzsh
:
echo Hello World > a{,/b{,/c}}/d.txt
または、再帰検索を使用して、ここで見つかった非表示のすべてのディレクトリに対して、次の操作を行います。
dirs=(**/*(/))
echo Hello World > $^dirs/d.txt
これは内部的に関連しているため、tee
出力は同時にすべてのファイルに書き込まれます。ファイルの数が多い場合は、開いているファイルの数に制限がある可能性があります。この場合、一度に1つのファイルを順番に作成する必要があります。
for d ($dirs) echo Hello World > $d/d.txt
規格に該当する内容は次のとおりです。
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
これは、で始まり、その後に有効な文字シーケンスが続くファイルだけでなく、-name '.*'
で始まるすべてのファイルと一致します。.
.
! -name .
希望する現在のディレクトリのみを除外息子-フォルダ(どちらも整理したくない.
)-name '.*' -prune
、隠しファイルを除いて、find
隠しディレクトリに降りるのを防ぎます。-o
:そうでない場合(または)-type d
そのタイプのファイルのみを選択目次。-exec sh -c 'inline-script' sh {} +
:一致するディレクトリのリストをインラインスクリプトに渡します。
答え2
努力する
find . -type d -exec /bin/bash -c 'echo "Hello world" >'{}'/d.txt' \;