文件编号的级联树

文件编号的级联树

标准输出tree包含有关文件层次结构的信息。该工具包含执行此操作的选项,其中大小添加所有文件的大小并仅显示文件夹 ( tree --du -h) 允许发现大目录。

我正在寻找同样的东西,但是要寻找文件数量来发现大树中包含数十万个文件的不太大目录的热点。

答案1

这似乎不可能,tree但你可以这样做:

慢速版本

find . -type d -exec bash -c 'printf "%7d   " '\
'$(find "$1" -mindepth 1 -maxdepth 1 -type f -not -type l -printf . | wc -m); '\
'printf "%s\n" "$1"' find {} \; 2>/dev/null |
awk '$1>1000'

打印文件编号(在本例中仅打印大于 1,000 的文件编号)和目录路径。

在我的 /etc 中执行(文件计数阈值为 50)输出如下:

    175   .
     70   ./sysconfig
     98   ./apparmor.d/abstractions
     84   ./gconf/gconf.xml.schemas
    122   ./brltty/Text
     76   ./sane.d

快速版

bu5hman的回答让我意识到我没有注意到这有多慢。

所以这是另一种方法的优化版本:

find . -type f -not -type l -printf '%h\n' 2>/dev/null |
  awk -v th=50 '{ a[$0]++; }; '\
  'END { PROCINFO["sorted_in"]="@unsorted"; for (key in a) if (a[key]<th) delete a[key];'\
  ' PROCINFO["sorted_in"]="@val_num_desc";for (key in a) printf "%7d   %s\n",a[key],key }'
    175   .
    122   ./brltty/Text
     98   ./apparmor.d/abstractions
     84   ./gconf/gconf.xml.schemas
     76   ./sane.d
     70   ./sysconfig

awk不仅可以进行过滤,还可以进行计数和排序。它可以按照正确的顺序执行此操作:计数、过滤、排序。而 sort、count、filer 是最差的。当然,这仅对巨大的目录号码很重要,而之间的区别

  1. 大量进程移动少量数据并且
  2. 少量或进程移动更多数据

即使 /etc 中有 400 多个目录并且子进程的页面缓存命中率(可能)为 100%,这仍然是非常了不起的。

答案2

原版

-type您只需对您感兴趣的文件系统进行一次扫描,然后按包含的文件夹和计数进行聚合。

find . -type f ! -type l 2>/dev/null | sed "s|/[^/]*$||g" | sort | uniq -c | awk '$1>=1000'

使用/etc基准@阈值 50

    109 .
     96 ./apparmor.d/abstractions
    138 ./ca-certificates/extracted/cadir
     64 ./fonts/conf.avail
     81 ./sane.d
     58 ./xdg

real    0m0.014s
user    0m0.015s
sys     0m0.018s

反间谍版

由于战争似乎已经爆发,我认为我应该优化自己的军械库,并且按照战时反间谍活动的最佳传统,我进行了%h\n无耻的盗窃。

find . -type f ! -type l -printf '%h\n' 2>/dev/null | 
   awk '{dir[$1]++}
        END{for (d in dir) if (dir[d] >=50) print dir[d], d}'|
   sort -g

58 ./xdg
64 ./fonts/conf.avail
81 ./sane.d
96 ./apparmor.d/abstractions
109 .
138 ./ca-certificates/extracted/cadir

real    0m0.006s
user    0m0.005s
sys     0m0.005s

由于此操作的执行时间小于我对小目录的关键反弹,并且我的整个 (2TB) 文件系统在约 1.5 秒内处理,因此我认为打字开销对我来说是即兴的一句台词有利。

尽管我慷慨地尊重 Glorious @haukelaging 解决方案的惊人速度

;)

后脚本我的整个FS

莫伊

real    0m1.481s
user    0m0.975s
sys     0m0.805s

土井

real    0m1.586s
user    0m1.069s
sys     0m0.843s

相关内容