假设我有以下命令。它设置为显示我的驱动器上最近修改的 20 个文件的列表,其中包含路径。
find -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -20
该命令工作正常,但在日期和时间的格式中,信息太多,因为它还显示毫秒。我的问题是如何删除它。另外,我如何更改它打印的位置,以便路径显示在左侧,日期显示在右侧?
答案1
你可以这样做:
find -type f -printf '%TY-%Tm-%Td %.8TT %p\n' | sort -r | sed -r 's/(^[^ ]+ [^ ]+) (.+)/\2 \1/' | head -20
在和.8
之间放置会修改该字段以将其限制为 8 个字符 ( )。正则表达式将行的第一部分(到之间有一个空格的非空格字符集)移动到行尾。时间必须位于命令行的开头。%
TT
hh:mm:ss
sed
sort
警告:如果显示的文件名包含空格和数字,则将日期放在文件名后面可能会导致混乱。但是,对于作为人类查看而不是输入另一个脚本或程序,此输出应该没问题。
否则,将时间保留在文件名前面:
find -type f -printf '%TY-%Tm-%Td %.8TT %p\n' | sort -r | head -20
编辑: sed
对于根据 @steeldriver 的评论修剪小数秒是不必要的。这可能是一个 GNU 扩展,但-printf
无论如何似乎都不是 POSIX。此外,还修正了排序错误。