'stat' formato de saída: trunca um campo de data

1

Em um formato stat (pelo menos o que eu recebo do bash no Linux) pode-se usar modificadores de formato: por exemplo %010s forçará um campo de tamanho a ter pelo menos 10 caracteres, preenchido à esquerda com zeros (btw isso é documentado em algum lugar?)

Existe um truque equivalente para restringir o comprimento de um campo? Eu quero largar a parte decimal do segundo nos formatos% xyz. Ou eu vou ter que pós-processar a saída com o sed / awk?

    
por xenoid 24.06.2018 / 10:16

2 respostas

4

Usando as ferramentas do GNU,

date -d "@$( stat -c '%Y' file )" +'%F %T %z'

Isso obteria o registro de data e hora da última modificação do arquivo fornecido (sem resolução de subsegundos) e usaria date para reformatar isso no mesmo formato que stat -c %y file produziria.

Exemplo:

$ stat -c '%y' file
2018-06-24 09:55:41.445763843 +0200

$ date -d "@$( stat -c '%Y' file )" +'%F %T %z'
2018-06-24 09:55:41 +0200

Pode-se usar a formatação printf -like para a especificação do formato %y diretamente, mas não para modificar uma parte da cadeia no meio:

$ stat -c '%.19y' file
2018-06-24 09:55:41

Isso trunca a string após 19 caracteres, o que remove os dados do subsegundo, mas a informação do fuso horário também é omitida.

    
por 24.06.2018 / 10:57
0

OK, desde que eu possa especificar um comprimento / pad tipo printf ( %010s , por exemplo), vamos voltar para a documentação raw printf, que documenta uma precisão que é na verdade o comprimento máximo do campo. E tadaaa .... funciona em stat formatos! (aqui truncado para manter apenas a parte da data):

stat -c '%.10y %10s %n' /boot/*
2018-05-17    1501659 /boot/abi-4.13.0-43-generic
2018-05-30    1501528 /boot/abi-4.13.0-45-generic
2018-05-17     213220 /boot/config-4.13.0-43-generic
2018-05-30     213220 /boot/config-4.13.0-45-generic
1970-01-01       4096 /boot/efi
2018-06-15       1024 /boot/grub
2018-05-22   52211016 /boot/initrd.img-4.13.0-43-generic
2018-06-22   52210415 /boot/initrd.img-4.13.0-45-generic
2017-04-08      12288 /boot/lost+found
2016-01-28     182704 /boot/memtest86+.bin
2016-01-28     184380 /boot/memtest86+.elf
2016-01-28     184840 /boot/memtest86+_multiboot.bin
2018-05-17        255 /boot/retpoline-4.13.0-43-generic
2018-05-30        255 /boot/retpoline-4.13.0-45-generic
2018-05-17    3884045 /boot/System.map-4.13.0-43-generic
2018-05-30    3883942 /boot/System.map-4.13.0-45-generic
2018-05-17    7713296 /boot/vmlinuz-4.13.0-43-generic
2018-05-22    7715224 /boot/vmlinuz-4.13.0-43-generic.efi.signed
2018-05-30    7712560 /boot/vmlinuz-4.13.0-45-generic
2018-06-14    7714488 /boot/vmlinuz-4.13.0-45-generic.efi.signed
    
por 24.06.2018 / 13:01