使用 stat 时更改文件大小格式

使用 stat 时更改文件大小格式

格式化字符%s使stat打印文件大小(以字节为单位)

# stat -c'%A %h %U %G %s %n' /bin/foo
-rw-r--r-- 1 root root 45112 /bin/foo 

ls可以配置为使用“千位分隔符”打印字节大小数字,即45,112代替通常的45112.

# BLOCK_SIZE="'1" ls -lA 
-rw-r--r-- 1 root root 45,112 Nov 15  2014

我可以类似地格式化 stat 的输出,以便文件大小具有千位分隔符吗?

stat我首先使用的原因是,我需要输出 like ls,但没​​有时间,因此-c'%A %h %U %G %s %n'

或者是否有其他方法可以ls在没有时间的情况下打印类似的输出?

答案1

指定日期格式,但将其留空,例如。

ls -lh --time-style="+"

生产

-rwxrwxr-x 1 christian christian 8.5K  a.out
drwxrwxr-x 2 christian christian 4.0K  sock
-rw-rw-r-- 1 christian christian  183  t2.c

答案2

在 GNU 系统上,您可以使用'GNU 标志printf

$ stat -c"%A %h %U %G %'s %n" /bin/foo  
-rw-r--r-- 1 root root 45,112 /bin/foo 

这记录在man 3 pritnf

'      For decimal conversion (i, d, u, f, F, g, G) the output is to be grouped
       with  thousands'  grouping  characters if the locale information indicates
       any. Note that many versions of gcc(1) cannot parse this option and will 
       issue a warning.  (SUSv2 did not include %'F, but SUSv3 added it.)

或者,您可以自己解析它:

$ stat --printf="%A\t%h\t%U\t%G\t%s\t%n\n" a | rev | 
    awk '{gsub(/.../,"&,",$2); print}' | rev
-rwxr-xr-x 2 terdon terdon 4,096 file

相关内容