altera o formato do tamanho do arquivo ao usar stat

3

O caractere de formatação %s faz stat imprimir o tamanho do arquivo em bytes

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

ls pode ser configurado para imprimir o número do tamanho do byte com "mil-separador", ou seja, 45,112 em vez do usual 45112 .

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

Posso formatar a saída da estatística de forma semelhante, para que o tamanho do arquivo tenha um separador de milhar?

A razão pela qual estou usando stat é que preciso produzir como ls , mas sem tempo, portanto -c'%A %h %U %G %s %n' .

Ou existe alguma outra maneira de imprimir a saída ls -like sem o tempo?

    
por Martin Vegter 02.06.2015 / 10:56

2 respostas

6

Especifique o formato da data, mas deixe-a vazia, por exemplo.

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

Produz

-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
    
por 02.06.2015 / 11:20
4

Em um sistema GNU, você pode usar o sinal ' do GNU printf :

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

Isso está documentado em 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.)

Como alternativa, você pode analisar isso em si mesmo:

$ 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
    
por 02.06.2015 / 11:16