我想找到一系列文件(基于通配符表达式)并汇总它们的磁盘使用量。
像这样的东西:
$ find . -name 'flibble*' -ctime +90 -exec du -sh {} \;
2.1G ./flibble_116.log
2.1G ./flibble_83.log
2.1G ./flibble_211040_157.log
2.1G ./flibble3747_51.log
Run Code Online (Sandbox Code Playgroud)
这项工作。但它不会产生我正在寻找的结果。它列出了每个文件使用的空间,就像find遍历它们一样。
我想要的是du找到的所有文件的总数。
Wit*_*iko 12
通过向 提供选项-c(或--total)du(1),您可以指示它生成总计。如果您的实现du(1)支持这些选项中的任何一个,则可以使用以下命令实现所需的效果:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,如果文件数超过系统允许的最大参数数,find仍可能执行command多次。的一些实现du(1)还支持从文件中读取文件名,不受上述限制的影响:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
Run Code Online (Sandbox Code Playgroud)
-exec command {} \;和的语义区别-exec command {} +如下:
command {} \;command对 的每个结果执行一次find。结果的路径名被传递而不是{}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
Run Code Online (Sandbox Code Playgroud)command {} +执行command,当所有结果都被检索。结果的路径名被传递而不是{}.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
Run Code Online (Sandbox Code Playgroud)该-print0选项导致find(1)将找到的文件名打印到由空字符分隔的标准输出,并且该--files0-from选项导致du(1)读取空分隔的文件名。与换行符不同,空字符可能不会出现在文件名中,因此输出是明确的。
要了解更多有关的选项du(1)和find(1),您应该咨询各自的联机帮助页:
$ man du
$ man find
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6685 次 |
| 最近记录: |