在一些巨大的目录中如何查找可以更快?
例如,我启动这个命令: find 。-group toto -prune exec du -sh {} \;
但是它在一些巨大的目录中一直被阻止并且永远不会(或者如果我等了一整天)给我一个答案。
我的系统:Solaris 10。
谢谢
我认为您的运行时间是二次的,因为du
已经对您命名的树中的文件求和。
以下将使遍历更快,因为它不会在 find 之外产生任何进程:
find . -group toto -prune -o -printf '%s\t%p\n'
这将列出例如
68 ./.profiles/sehe/.cache/upstart/im-config.log.1.gz
68 ./.profiles/sehe/.cache/upstart/im-config.log.2.gz
71 ./.profiles/sehe/.cache/upstart/im-config.log.3.gz
请注意,您可以报告 512 个块 ( %b
),它报告实际分配的大小(即使文件是稀疏的)。
使用我的水晶球,您可能希望按组或按用户报告使用情况:
find . -group toto -prune -o -printf '%g\t%b\n' | sort -k2n -k1,1
哪个打印例如
group1 2200
group1 2208
group1 2216
group1 2480
group1 2648
group1 2784
group1 3656
group1 3664
group1 3768
group1 4360
group1 5112
group1 5952
group1 6416
group1 7248
group2 8192
group2 8192
group2 8192
group2 9696
group2 12760
group2 19944
group2 33264
group2 34936
对这些信息进行后处理以获得您真正想要的结果应该相对容易,例如q
(参见 github):
sehe@desktop:/tmp$ sudo find . -printf '%g %b\n' | ./q "select c1,sum(2) from - group by c1"
gdm 10
root 22
someone 18
sehe 2826
如果 . 目录是一个挂载点尝试:
df -h .
如果当前目录不是挂载点,请让 du 仅查看目录文件并以千字节为单位报告,du -h 给出不同的单位(K、MB 等),因此您无法添加它们,du -ks 打印一致的单位:
find . -type d -group toto -prune -exec du -ks {} \; |
awk '{sum += $1} END {print sum, " Blocks"}'