仅列出当前目录的目录树的所有文件/目录的计数

仅列出当前目录的目录树的所有文件/目录的计数

我想列出当前目录的每个子目录树下的目录数。由于目录太多,我无法进入各个目录进行检查。我想生成一份如下图所示的报告:

在此输入图像描述

问题是:我的服务器发出一些警告,表明已达到创建目录的最大限制。所以我想知道我的父目录中哪个目录有最多的子目录(不包括文件),

答案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

您可以首先找到顶级目录,然后使用第二个查找来计算顶级目录中的文件和目录的数量:

$ 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

相关内容