Bash
stat
輸出格式:截斷日期欄位
在一種
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 個字元後截斷字元串,從而刪除亞秒級數據,但時區資訊也會被忽略。