次のようなサブディレクトリが多数存在します。
/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; 完了