フォルダを繰り返し、ファイルをテキストとしてリストする Bash スクリプト

フォルダを繰り返し、ファイルをテキストとしてリストする Bash スクリプト

Windows CMDスクリプトでこれを行うことができますが、今はRaspberry Pi経由でDebianを使用しています。

私がしたいことは...

(現在のフォルダから)

  • 各サブフォルダについて...
    • Original_filenames.txt というファイルを作成します。
    • フォルダ名をoriginal_filenames.txtにエコー
    • すべてのファイル(サブフォルダを含む)をOriginal_filenames.txtに一覧表示します。

ベストアンサー1

シェルループを使用してください:

for dir in */; do
    { printf '%s\n' "$dir"
      ( cd "$dir" && find . )
    } >"$dir/original_filenames.txt"
done

これにより、現在のディレクトリのすべてのサブディレクトリが繰り返されます。ループ本文はディレクトリ名を印刷し、ディレクトリ内のすべてのファイルとディレクトリのリストを繰り返し印刷します。この出力はoriginal_filenames.txtディレクトリのファイルに移動されます。

短く:

for dir in */; do
    find "$dir" >"$dir/original_filenames.txt"
done

書き込まれるファイルのパス名はすべてサブフォルダ名で始まるため、わずかに異なる出力が生成されます。

ディレクトリ名には興味がなく、通常のファイルのパス名だけが必要な場合は、ディレクトリ名の後にwithを使用してくださいfind-type f


計画中の場合は参考にしてください使用見つかったパス名の中に改行文字が含まれている場合(Unixシステムでは完全に可能です)、コンテンツの出力ファイルの作成が失敗するか、少なくとも非常に問題になります。

おすすめ記事