我正在尝试找出所有目录以及以模式int-*
开头的整体大小
为此,我正在使用以下命令
$sudo ls -ld int-* | grep ^d | wc -l
3339
$ sudo ls -ld int-* | grep ^d | du -sh
204G .
我的命令正确吗?还有其他命令组合可以收集上述信息吗?
答案 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
中来压缩输出。