我最近在意外复制/替换困境中丢失了一堆来自eclipse的文件。我能够恢复其中的大多数,但我在eclipse元数据文件夹中找到了文件的历史记录,其中一些是我需要的。历史的路径是:
($WORKSPACE/.metadata/.plugins/org.eclipse.core.resources/.history).
里面有一堆文件夹,如3e,2f,1a,ff等。每个文件夹都有一些名为“2054f7f9a0d30012175be7013ca49f5b”的文件。我能够用一个我知道会在文件中的关键字做一个递归grep并返回一个文件名列表(grep -R -l'KEYWORD'),现在我无法弄清楚如何对它们进行排序修改。
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
你可以尝试:
find $WORK.../.history -type f -printf '%T@\t%p\n' | sort -nr | cut -f2- | xargs grep 'your_pattern'
分解的:
find
查找所有普通文件并打印其修改时间和路径sort
以数字方式对它们进行排序 - 反向排序,因此最高数字排在第一位(最新修改后的数字)cut
从每行中删除时间xargs
为每个文件运行其参数输入,grep
命令,所以当文件名包含空格时,上述内容无效,但希望情况并非如此...... -printf
仅适用于GNU find
。
对于重复性工作,您可以将命令分为两部分:
find $WORK.../.history -type f -printf '%T@\t%p\n' | sort -nr | cut -f2- > /somewhere/FILENAMES_SORTED_BY_MODIF_TIME
因此,在第1步中,您将文件名列表按其修改时间排序,然后可以在其内容上重复使用grep命令:
< /somewhere/FILENAMES_SORTED_BY_MODIF_TIME xargs grep 'your_pattern'
上述命令通常写为
xargs grep 'your_pattern' < /somewhere/FILENAMES_SORTED_BY_MODIF_TIME
但是对于bash
,可以将重定向写入开头,在这种情况下,如果模式位于最后一位,则更简单地更改pattern
的{{1}} ...
如果要检查具有修改时间的文件名列表,可以将上述命令分解为:
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-
。