【问题标题】:Output file size for all files of certain type in directory recursively?递归地输出目录中某些类型的所有文件的文件大小?
【发布时间】:2019-02-13 02:39:05
【问题描述】:

我试图在一个目录中递归地获取 PDF 文件的总大小。我尝试在目录中运行下面的命令,但递归部分无法正常工作,因为它似乎只报告当前目录中的文件而不包括其中的目录。我预计结果将接近 100 GB,但该命令仅报告大约 200 MB 的文件。

find . -name "*.pdf" | xargs du -sch

请帮忙!

【问题讨论】:

标签: linux unix


【解决方案1】:

使用stat -c %n,%s 获取各个文件的file namesize。然后使用awk 对大小求和并打印。

$ find . -name '*.pdf' -exec stat -c %n,%s {} \; | awk -F, '{sum+=$2}END{print sum}'

事实上你不需要%n,因为你只想要总和:

$ find . -name '*.pdf' -exec stat -c %s {} \; | awk '{sum+=$1}END{print sum}'

【讨论】:

  • 感谢您的回复。这似乎列出了所有文件及其大小,但没有给出总和。如何获得所有文件大小的总和?
  • 成功了!非常感谢!我接受了你的回答
  • 在 MacOS 中,我们必须使用 stat -f %z 代替。然后就可以了,谢谢。
【解决方案2】:

您可以使用以下方法获取所有文件的大小总和:

find . -name '*.pdf' -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$/\n/'| bc

首先find 查找指定的所有文件,并为每个文件运行stat,它会打印文件大小。然后我使用tr 将所有换行符与一个'+' 相匹配,然后我删除换行符的尾随'+' 并将其传递给bc,它会打印总和。

【讨论】:

  • 卡米尔,感谢您的回复。不幸的是,服务器没有安装“bc”,所以我无法查看这是否有效。 iamauser 的回答有效,所以我接受了他们的回答
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 2010-10-19
  • 2011-02-14
  • 1970-01-01
  • 2020-06-23
  • 2015-11-17
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多