你可以试试:
find $WORK.../.history -type f -printf '%T@\t%p\n' | sort -nr | cut -f2- | xargs grep 'your_pattern'
分解:
- 查找所有普通文件并打印它们的
find
修改时间和路径
- sort 按
sort
数字对它们进行排序 - 并反转,所以最高的数字排在第一位(最新修改的)
cut
删除每一行的时间
- 为
xargs
每个文件运行它的参数,得到它的输入,
- 在这种情况下将运行
grep
命令,所以
- grep 找到的第一个文件 - 是最新修改的
当文件名包含空格时,上述内容不起作用,但希望这不是您的情况......-printf
仅适用于GNU find
.
对于重复性工作,您可以将命令拆分为两部分:
find $WORK.../.history -type f -printf '%T@\t%p\n' | sort -nr | cut -f2- > /somewhere/FILENAMES_SORTED_BY_MODIF_TIME
因此,在第一步中,您将按修改时间排序的文件名列表保存到某处,然后您可以在其内容上重复使用 grep 命令:
< /somewhere/FILENAMES_SORTED_BY_MODIF_TIME xargs grep 'your_pattern'
上面的命令通常写成
xargs grep 'your_pattern' < /somewhere/FILENAMES_SORTED_BY_MODIF_TIME
但是可以bash
将重定向写入开头,在这种情况下pattern
,grep
如果模式位于最后一个位置,则更简单地更改...
如果要检查带有修改时间的文件名列表,可以将上述命令分解为:
find $WORK.../.history -type f -printf "%T@\t%Tc\t%p\n" | sort -nr >/somewehre/FILENAMES_WITH_DATE
检查列表(它们现在也包含可读日期)并使用下一个
< /somewehre/FILENAMES_WITH_DATE cut -f3- | xargs grep 'your_pattern'
请注意,现在需要使用-f3-
而不是-f2-
像第一个示例中那样。