すべてのサブディレクトリに同じファイルを作成するにはどうすればいいですか?

すべてのサブディレクトリに同じファイルを作成するにはどうすればいいですか?

次のようなサブディレクトリが多数存在します。

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

いいえ、それぞれに新しいファイルを作成したいです。ファイル名は次のように一定です。

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

どうすればいいですか?touch /path/to/my/subs/*/foo.mdそうしたいと思っていましたが、touch: /path/to/my/subs/*/foo.md: No such file or directory

答え1

bashシェルとして使用する場合は、中括弧の展開を使用します。

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

答え2

次のユーティリティを使用できますfind:

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

これは、サブから始めてツリー全体をたどり、リーフ (ターミナル) ディレクトリを見つけて、そこで foo md ファイルにアクセスします。

また、「-exec」の部分を省略して、xargs最後にすべてのファイルをまとめて作成し、生成されるtouchバイナリの数を減らすか、単一のタッチを使用することもできます。

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

このfind部分はディレクトリを取得し、sed適切なファイル名に変換します。

ディレクトリが 1 層の場合:

for dir in /path/to/my/subs/*; do touch $dir/foo.md; 完了

関連情報