如何更改查找输出中的日期格式和位置

如何更改查找输出中的日期格式和位置

假设我有以下命令。它设置为显示我的驱动器上最近修改的 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 个字符 ( )。正则表达式将行的第一部分(到之间有一个空格的非空格字符集)移动到行尾。时间必须位于命令行的开头。%TThh:mm:sssedsort

警告:如果显示的文件名包含空格和数字,则将日期放在文件名后面可能会导致混乱。但是,对于作为人类查看而不是输入另一个脚本或程序,此输出应该没问题。

否则,将时间保留在文件名前面:

find -type f -printf '%TY-%Tm-%Td %.8TT %p\n' | sort -r | head -20

编辑: sed对于根据 @steeldriver 的评论修剪小数秒是不必要的。这可能是一个 GNU 扩展,但-printf无论如何似乎都不是 POSIX。此外,还修正了排序错误。

相关内容