現在のディレクトリのディレクトリツリーにあるすべてのファイル/ディレクトリの数のみを一覧表示

現在のディレクトリのディレクトリツリーにあるすべてのファイル/ディレクトリの数のみを一覧表示

現在のディレクトリの各サブディレクトリツリーの下にあるディレクトリの数を一覧表示したいと思います。ディレクトリが多すぎて各ディレクトリに入って確認できません。以下のレポートを生成したいと思います。

ここに画像の説明を入力してください。

問題は、私のサーバーがディレクトリ作成の最大限度に達したという警告を表示することです。それで、親ディレクトリのどれがどのディレクトリに最も多くのサブディレクトリ(ファイルを除く)があるのか​​を知りたいと思います。

答え1

純粋なksh93ソリューション:

FIGNORE='@(.|..)'
for dir in */; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[*]}"; done

結果/usr/src:

linux-3.17.7-gentoo/:   561
linux-3.5.7-gentoo/:    517
linux-3.7.10-gentoo/:   505
linux-3.7.9-gentoo/:    513
linux-3.8.13-gentoo/:   551
linux-4.0.5-gentoo/:    1849

答え2

まず、最上位ディレクトリを見つけてから、2番目のクエリを使用して最上位ディレクトリにあるファイルとディレクトリの数を計算できます。

$ for dir in $(find . -maxdepth 1 ! -path . -type d | sort); \
      do echo -n "$dir " && find $dir ! -path . | wc -l ; done
./adir 1151
./anotherdir 140
./623de41e44 280
./examples 154
...

答え3

このようなものがあなたの要件を満たしていますか?

このパスは/bootサンプルデモに使用されます。必要なディレクトリに変更します。

for DIR in $(find /boot/* -maxdepth 1 -type d)
do
    printf "%40s: %10d\n" "${DIR}" $(find ${DIR}|wc -l)
done

出力:

                          /boot/grub:        282
                    /boot/grub/fonts:          2
                  /boot/grub/i386-pc:        272
                   /boot/grub/locale:          4
                    /boot/lost+found:          1

答え4

以下の小さなループは、すべてのファイル数をリストします。(シンボリックリンクを除く)そのサブディレクトリは、. サブディレクトリと同じファイルシステムに存在します。

for d in ./* ./.[!.]* ./..?*
do  ! [ -h "$d" ]  &&
      cd "$d" 2>&3 || continue
      printf "%s:\t" "$d"
      find .//. -xdev -depth ! -type l |
      grep -c '^\.//\.'
      cd ..
done  3>/dev/null

関連情報