テキストファイルにディレクトリ名が含まれるように、各サブディレクトリにテキストファイルを作成する方法

テキストファイルにディレクトリ名が含まれるように、各サブディレクトリにテキストファイルを作成する方法

5つの空のディレクトリがあります。

[X]$ ls
dir_1  dir_2  dir_3  dir_4  dir_5

テキストファイルにそのディレクトリの名前が含まれるように各ディレクトリにテキストファイルを作成するにはどうすればよいですか。たとえば、dir_1テキストファイルが含まれ、テキストfile_1.txtファイルにdir_1テキストが含まれ、dir_2テキストファイルにfile_2.txtテキストが含まれるdir_2式です。

情報を検索しましたが、不明です。最近Linuxを学び始めました。次の作業を行う必要がありますか?

find . -type d -exec touch (something?)

forループを使用してこれを実行できますか?

ベストアンサー1

for d in dir_*; do
    printf "%s\n" "$d" > "$d/file_${d##*_}.txt"
done
  • $dすべてのディレクトリ名に展開されます。
  • ${d##*_}$dパラメータ拡張セクションで詳細をお読みください。BASHマニュアルまたはPOSIX仕様
  • printf "%s\n" "$d" > "$d/file_${d##*_}.txt"そのディレクトリのtxtファイルにディレクトリ名を書き込みます。

一行で:

for d in dir_*; do printf "%s\n" "$d" > "$d/file_${d##*_}.txt"; done

printf前者では正しく処理できますが、後者では処理できない特殊な場合があるため、同意します。しかし、echo提示された特定のケースではecho問題にはなりません。詳細情報を探すなぜprintfがechoより優れているのですか?


で始まるディレクトリ以外の項目を避ける必要がある場合は、オプション1は上記のスクリプトのステートメントの前にテストを追加することですdir_。ディレクトリのみを一致させるには、オプション2を使用します。[ -d "$d" ] &&printfdir_*/

for d in dir_*/; do
    dirn=${d%%/}
    printf "%s\n" "$dirn" > "${d}file_${dirn##*_}.txt"
done

おすすめ記事