【问题标题】:How can my find/du be faster?我的 find/du 怎样才能更快?
【发布时间】:2014-07-19 10:04:33
【问题描述】:

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

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

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

我的系统:Solaris 10。

谢谢

【问题讨论】:

  • 如果您只查找文件,请执行 find | grep 'file1' 。如果您正在寻找特定的东西,那么找到一个可以将所有特定信息转储到文件中的命令,然后grep 搜索它。 grep 速度快得惊人,如果你有一个文件来存储你需要的信息,你会很高兴的。
  • 这个查找的目的是用“du”命令计算目录的大小。不幸的是,我无法在文件中转发 find 或 ls -ltR 的结果。
  • 如果它在某些大目录上被阻止,请与ls 或 globbing 联系;可能是使用的文件系统不喜欢大目录

标签: bash directory find solaris du


【解决方案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

【讨论】:

    【解决方案2】:

    如果 .目录是挂载点试试:

    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"}'
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2011-06-14
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2017-12-20
      • 2012-03-23
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多