2017-05-31 135 views
0

我有一个名为$lsoutput变量,其中我存储ls -l命令的结果
它含量获取文件大小

  • -rw-R - R-- 1根的ftp 44 Apr 29 2003 first_file.txt
  • 我想得到该文件的大小。
  • 我useed以下正则表达式

if [[ "$lsoutput" =~ ^[-rwx]{10}[[:space:]][[:digit:]]+[[:space:]][[:alnum:]]+[[:space:]][[:alnum:]]+[[:space]]([[:digit:]]+) ]] 
    echo ${BASH_REMATCH[1]} 
fi 

Unfortuantely这个正则表达式不起作用。它有什么问题?你能提供一个正确的吗?感谢您的帮助

+0

参见[为什么你不应该解析'ls'的输出(http://mywiki.wooledge.org/ParsingLs) - 尤其是标题为“获取元数据从一个文件“ –

+0

考虑'size = $(wc -c

+0

相关:[可移植的方式获取文件大小以字节在壳](https://stackoverflow.com/questions/1815329/portable-way-to-get-file-size-in-bytes-in-shell) –

回答

0

是不是更容易使用:

ls -l | awk '{print $5}'

刚刚打印文件的大小?

+0

缺少关闭撇号,也不需要'-rt'选项。无论如何比在这里使用long regexp更清洁,特别是如果它是错误的。 –

+0

SO不让我编辑答案,因为它至少需要6个字符才能编辑,并且不想只做一些改写,这是您的答案...所以请编辑它。 –

+0

已修复您的评论,谢谢! –

1

有更简单的方法。

stat --format=%s <FILE> 

上述命令以字节为单位打印文件的大小。

解析ls输出is not recommended

+0

也可以使用GNU find:'find'$ file“-maxdepth 0 -printf'%s \ n'',例如。 –

0

与切:

ls -l|tr -s ' ' |cut -d' ' -f5