使用命令du
,我想获得目录的总大小
输出命令du myfolder
:
5454 kkkkk
666 aaaaa
3456788 total
我能够提取最后一行,但不能删除字符串total
:
du -c myfolder | grep total | cut -d ' ' -f 1
结果:
3456788 total
期望的结果
3456788
我想将所有命令放在一行中。
答案 0 :(得分:1)
首先,您可能希望使用tail -n1
而不是grep total
...请考虑如果您有一个名为local
的目录会发生什么? :-)
现在,让我们看一下du
hexdump
的输出:
$ du -c tmp | tail -n1 | hexdump -C
00000000 31 34 30 33 34 34 4b 09 74 6f 74 61 6c 0a |140344K.total.|
那是0x09
之后的字符K
,man ascii
告诉我们:
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
这是一个标签,而不是空格: - )
制表符已经是默认分隔符(这在POSIX规范中指定,因此您可以安全地依赖它),因此您根本不需要-d
。
所以,把它放在一起,我们最终得到:
$ du -c tmp | tail -n1 | cut -f1
140344K
答案 1 :(得分:1)
这可能是因为它的制表符分隔(这是剪切的默认分隔符):
~$ du -c foo | grep total | cut -f1
4
~$ du -c foo | grep total | cut -d' ' -f1
4
要插入标签,请使用Ctrl + v,然后使用TAB
或者,您可以使用awk打印以total
结尾的行的第一个字段:
~$ du -c foo | awk '/total$/{print $1}'
4
答案 2 :(得分:1)
为什么不使用-s
对其进行总结?这样您就不必grep "total"
等
$ du .
24 ./aa/bb
...
# many lines
...
2332 .
$ du -hs .
2.3M .
然后,要获得该值,请输入awk
。这样您就不必担心分隔符是空格或制表符:
du -s myfolder | awk '{print $1}'
来自man du
:
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
display only a total for each argument
答案 3 :(得分:0)
我建议使用awk:
value=$(du -c myfolder | awk '/total/{print $1}')
这只是提取与模式匹配的第一个字段" total"。
如果它始终是你感兴趣的最后一行,那么另一种方法就是使用它:
value=$(du -c myfolder | awk 'END{print $1}')
最后一行中的字段值可以在END
块中访问,因此您可以通过这种方式获取最后一行的第一个字段。