各サブフォルダにテキストを含むファイルを作成するには?

各サブフォルダにテキストを含むファイルを作成するには?

たとえば、階層がありますa/b/c。各フォルダにd.txt 名前とテキストを含むファイルを作成するには?"Hello World"aa/ba/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 {} +:一致するディレクトリのリストをインラインスクリプトに渡します。

おすすめ記事