我从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
,{{相应地,1}}和1000000
。但是,我没有找到一个很好的方法。
我在没有真正了解最佳方法的情况下尝试了一些事情:
1000
我希望这会有效,因为我可以在一个或多个空格上划分它。
但这不起作用。如何为ls -alth | cut -f 5 -d \s+
提供正则表达式分隔符?或者是否有更简单的方法从cut
?
我正在使用CentOS6.4
答案 0 :(得分:2)
这个答案解决了问题的问题,但认为George Vasiliou's helpful find
solution是一个潜在的优越选择。
cut
仅支持单个,字面字符作为分隔符(-d
),因此它不适合使用。
为了提取以每行可变数量的空格分隔的标记(字段),awk
是最好的工具,因此George Vasiliou提出的解决方案是最简单的:<登记/>
ls -alth | awk '{print $5}'
提取第五个以空格分隔的字段($5
),这是大小。
而不是先使用-h
,然后将人类可读的后缀(例如B
,M
和G
)重新转换回纯粹的< em> byte 计数(顺便提一下,乘数必须是1024
的倍数,而不是1000
),只需从-h
命令中省略ls
即可输出原始字节默认计数:
ls -alt | awk '{print $5}'
答案 1 :(得分:2)
Alternative to the awk solution that will treat whitespace correctly , one can also use the find
utility that can provide results similar to ls
.
Actually you can use find
to display directly size of the results without the need of any other tool/pipe like cut
or awk
.
So, to list mere bytes you can use:
$ find . -maxdepth 1 -printf %s\\n
173
3
684
You can combine filename + bytes in find with
$ find . -maxdepth 1 -printf %f-%s\\n
bsd.txt-173
file4-3
shellcolors.sh-684
You can consult man find
to see a lot of available options under -printf
.
Moreover, by removing -maxdepth
option you can also have a listing of all the files in the subdirectories.
One more alternative is to use du
utility, that is capable to provide results in human readable format:
$ du -a -b -h -d1
1.9M ./appsfiles
173 ./bsd.txt
3 ./file4
684 ./shellcolors.sh
-a
: all files and directories. Remove this option to get only directories size
-b
: Reports the real size of file - Removing this option will report the disk size occupied by this file (i.e a file of 3 kB occupies 4K in reality)
-h
: human readable size
-d1
: depth1
You can further parse the results of du with |cut -d" " -f1
or with |awk '{print $1}'
答案 2 :(得分:1)
我因为不得不查询awk(ward)语法并编写了自己的语法而感到恼火:
https://www.npmjs.com/package/cutr
安装方式
npm i -g cutr
ls --full-time | cutr -d ' +' -f 6-
或以类似的方式运行
ls --full-time | npx cutr -d ' +' -f 6-
您的命令可能是
ls -alth | cutr -f 5 -d '\s+'