1

在一些巨大的目录中如何查找可以更快?

例如,我启动这个命令: find 。-group toto -prune exec du -sh {} \;

但是它在一些巨大的目录中一直被阻止并且永远不会(或者如果我等了一整天)给我一个答案。

我的系统:Solaris 10。

谢谢

4

2 回答 2

1

我认为您的运行时间是二次的,因为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
于 2014-05-30T20:09:24.573 回答
0

如果 . 目录是一个挂载点尝试:

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"}'
于 2014-05-30T18:54:52.517 回答