Bash

stat 輸出格式:截斷日期欄位

  • August 23, 2021

在一種stat格式中(至少是我從 Linux 上的 bash 獲得的格式),可以使用格式修飾符:例如,%010s將強制 size 欄位至少為 10 個字元,用零填充到左側(順便說一句,這在某處有記錄嗎?)

是否有等效的技巧來限製欄位的長度?我想以 %xyz 格式刪除秒的小數部分。還是我必須使用 sed/awk 對輸出進行後處理?

好的,因為我可以指定一個類似 printf 的長度/填充(%010s例如),讓我們回到原始的 printf 文件,該文件記錄的精度實際上是欄位的最大長度。和 tadaaa…. 它以stat格式工作!(此處截斷以僅保留日期部分):

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

使用 GNU 工具,

date -r file +'%F %T %z'

這將獲得給定文件的最後修改的時間戳(無亞秒級解析度),並用於將其重新格式化為與將產生date的格式相同的格式。stat -c %y file

例子:

$ stat -c '%y' file
2021-03-17 08:53:39.540802643 +0100
$ date -r file +'%F %T %z'
2021-03-17 08:53:39 +0100

可以直接對格式規範使用printf-like 格式%y,但不能修改中間的一段字元串:

$ stat -c '%.19y' file
2021-03-17 08:53:39

這會在 19 個字元後截斷字元串,從而刪除亞秒級數據,但時區資訊也會被忽略。

引用自:https://unix.stackexchange.com/questions/451554