来自du command的总数

时间:2018-07-30 11:47:08

标签: grep rhel ls du

我正在尝试找出所有目录以及以模式int-*开头的整体大小

为此,我正在使用以下命令

  $sudo ls -ld int-* | grep ^d | wc -l
  3339

  $ sudo ls -ld int-* | grep ^d | du -sh
  204G    .

我的命令正确吗?还有其他命令组合可以收集上述信息吗?

2 个答案:

答案 0 :(得分:0)

du -shc ./int-*/应该以模式int-*给出所有目录的总数。添加斜杠可以解决目录问题

AS

-s,仅报告当前目录中使用情况的总和,而不报告其中包含的每个目录

-h,是以可读格式获取结果

答案 1 :(得分:0)

不,您的命令不是(尽管第一个命令并非完全错误)。

两者都解析ls的输出,这很危险,因为它ls会产生人类可读的输出,并且格式将来可能会改变(实际上,它的输出数倍于年,不同的Unix风格也有所不同)。因此,一般而言,解析输出ls被认为是不好的。有关详细信息,请参见http://mywiki.wooledge.org/ParsingLs

du不会从du读取任何内容时,第二条命令也会将此输出通过管道传输到stdin。它只是忽略了这种输入,并且与在没有管道的情况下进行调用时将执行的操作相同:du -sh。这当然不是您想要的。

以这种适当的方式最好地实现您想要的东西:

find -maxdepth 1 -type d -name 'int-*' -printf 'x\n' | wc -l
find -maxdepth 1 -type d -name 'int-*' -print0 | du --files0-from=- -c

使用选项--files0-from=-,命令du stdin读取NUL分隔的文件名。 -c使其总共打印所有参数。

当然,您仍然可以为人类可读的大小(4G等)添加选项-h,如果不希望为参数的子目录添加大小,则可以添加-s

如果只想总计 ,最好的方法是将输出通过管道传递到tail -1中来压缩输出。