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最初に使用した理由は、と同じ出力が必要なのに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

関連情報