在一种stat
格式(至少是我从 Linux 上的 bash 获得的格式)中,可以使用格式修饰符:例如,%010s
将强制大小字段至少为 10 个字符,并在左侧填充零(顺便说一句,这是否记录在某处?)
是否有等效的技巧来限制字段的长度?我想在 %xyz 格式中删除秒的小数部分。或者我是否必须使用 sed/awk 对输出进行后处理?
Kus*_*nda 11
使用 GNU 工具,
date -r file +'%F %T %z'
Run Code Online (Sandbox Code Playgroud)
这将获得给定文件上次修改的时间戳(无亚秒分辨率),并用于date
将其重新格式化为与stat -c %y file
生成的格式相同的格式。
例子:
date -r file +'%F %T %z'
Run Code Online (Sandbox Code Playgroud)
$ stat -c '%y' file
2021-03-17 08:53:39.540802643 +0100
Run Code Online (Sandbox Code Playgroud)
可以直接printf
对%y
格式规范使用-like 格式,但不能修改中间的一段字符串:
$ date -r file +'%F %T %z'
2021-03-17 08:53:39 +0100
Run Code Online (Sandbox Code Playgroud)
这会截断 19 个字符后的字符串,从而删除亚秒级数据,但时区信息也被排除在外。
好的,因为我可以指定类似 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
Run Code Online (Sandbox Code Playgroud)