多くのファイルとディレクトリがあるディレクトリがあります。
各ディレクトリに繰り返し含まれるファイル(およびディレクトリ)の数を取得しようとしています。
私は以下を試しました:
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
。