列表中的文件使用多少磁盘空间?

列表中的文件使用多少磁盘空间?

如何找到列表中的文件使用了多少磁盘空间?我正在寻找一个变体

du -s *.sql

我只想查看总计,上面的命令总是为每个文件显示一行。

答案1

用于du -c获取总计,然后通过管道tail仅获取最后一行(总计):

du -c -- *.sql | tail -n 1

好像没有办法让du自己举报只是一组文件的总数。

--不是必需的,但如果要在脚本中使用此命令,强烈建议这样做。它标记选项的结束并防止一些有趣的文件名。请参阅此处了解更多信息“--”(双破折号)是什么意思?


一些技术上的挑剔:

如果任何*.sql文件是“隐藏”的(文件名以点开头),那么它们将不会被包含在内。这是因为默认情况下 glob 不包含隐藏文件。

为此*.sql,目录du将包括全部递归地访问这些目录中的文件。

使用 zsh 您可以编写*.sql(^/)排除目录。或者*.sql(D)包含隐藏文件。有关更多信息,请查找 zsh glob 限定符。

为此*.sql,符号链接du将计算链接本身的大小,而不是它指向的目标的大小。用于du -H获取链接目标的大小。

请注意,在任何情况下,du包括 GNU 在内的大多数实现du都只会计算唯一文件的磁盘使用情况。因此,如果foo.sql是硬链接bar.sql(或符号链接并被-H使用),则其磁盘使用量将仅计算一次。

如果您计划将文件复制到不支持硬链接的文件系统,这可能会导致混乱。在大多数情况下,硬链接文件将被复制两次,最终您在目标系统上需要的磁盘空间将多于所示的磁盘空间du

通过 GNU 实现,可以使用du该选项来跳过重复数据删除。-l

答案2

从你的例子来看,什么不起作用?你想要一笔钱吗?  man du显示该-c选项提供了使用总和:

du -sc -- *.sql

您可能还喜欢-h-k参数。

答案3

你的问题非常含糊,但我怀疑你正在寻找-c标志来产生总数。

du -c -- *.sql

答案4

如果您可以使用 find 生成文件列表(或其他内容),您还可以:

find {directory} {matching expression} -exec stat -c "%s" {} \; | awk 'BEGIN{total=0} {total=total+$1} END{print total/1000000.00}'

例如,要查看 /some/dir 中所有 .jar 文件的总大小(以 MB 为单位):

find /some/dir -name '*.jar' -exec ...

虽然这确实为每个文件执行一个进程,但结果相当快。

相关内容