我从 ls -alth
得到了这样的输出:
drwxr-xr-x 5 root admin 170B Aug 3 2016 ..
drwxr-xr-x 5 root admin 70B Aug 3 2016 ..
drwxr-xr-x 5 root admin 3B Aug 3 2016 ..
drwxr-xr-x 5 root admin 9M Aug 3 2016 ..
现在,我想解析出 170B
部分,这显然是人类可读格式的大小。我想使用 cut
或 sed
来执行此操作,因为我不想使用比必要的更复杂/更难使用的工具。
理想情况下,我希望它足够健壮,能够处理大小附带的 B
、M
或 K
后缀,并相应地相乘通过 1
、1000000
和 1000
相应地。不过,我还没有找到这样做的好方法。
我已经尝试了一些事情,但并不知道最好的方法:
ls -alth | cut -f 5 -d \s+
我希望这会奏效,因为我可以用一个或多个空格 来分隔它。
但这行不通。如何为 cut
提供正则表达式分隔符?或者是否有更简单的方法从 ls -alth
中仅提取文件的大小?
我用的是CentOS6.4
最佳答案
这个答案解决了问题所问,但请考虑 George Vasiliou's helpful find
solution作为潜在的优越替代品。
cut
只支持单个,文字字符作为分隔符(-d
),所以不对要使用的工具。对于提取每行用可变数量的空格分隔的标记(字段),
awk
是最好的工具,因此 George Vasiliou 提出的解决方案是最简单的:
ls -alth | awk '{print $5}'
提取第 5 个以空格分隔的字段 ($5
),即大小。而不是先使用
-h
,然后重新转换人类可读的后缀(例如B
、M
和G
) 回到单纯的 byte 计数(顺便说一下,乘数必须是1024
的倍数,而不是1000
),只需从ls
命令中省略-h
,它默认输出原始字节数:
ls -alt | awk '{print $5}'
关于sed - 如何在命令行中使用带有 cut 的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312360/