複数のディレクトリのファイル数を再帰的に数える方法は?

複数のディレクトリのファイル数を再帰的に数える方法は?

多くのファイルとディレクトリがあるディレクトリがあります。

各ディレクトリに繰り返し含まれるファイル(およびディレクトリ)の数を取得しようとしています。

私は以下を試しました:

for dir in $(find -maxdepth 1 -type d); do echo "$dir"; echo find "$dir" | wc -l; done

ただし、これは各ディレクトリの結果として「1」を返します。

私は同様の問題を抱えている他の質問がいくつかあることを知っていますが、上記のコードで私のエラーが何であるかを知りたいです。

ベストアンサー1

GNU( bash, wc, find) ソリューションすべてのパスで動作、スペース、改行、またはダッシュで始まるすべての項目が含まれている場合も同様です。

shopt -s nullglob
for dir in ./*/
do
    printf '%s\n' "$dir"
    find "$dir" -mindepth 1 -printf x | wc --chars
done

説明する:

  • nullglobこのオプションは、ディレクトリが含まれていない場合のエラーを防ぎます。./
  • ./ディレクトリの Globs はダッシュ(" ")で始まるファイル名が-歪んechoだりfind、 。
  • globの末尾にあるスラッシュは、ディレクトリだけを処理するようにします。
  • -mindepth 1ディレクトリ自体を計算しないでください。
  • ドットで始まる最上位ディレクトリを含めるには、ループの前にshopt -s dotglob実行する必要がありますfor

おすすめ記事