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" ] &&
printf
dir_*/
for d in dir_*/; do
dirn=${d%%/}
printf "%s\n" "$dirn" > "${d}file_${dirn##*_}.txt"
done