2

我最近在意外复制/替换困境中从 eclipse 中丢失了一堆文件。我能够恢复其中的大部分,但我在 eclipse 元数据文件夹中找到了文件的历史记录,其中一些是我需要的。历史的路径是:

($WORKSPACE/.metadata/.plugins/org.eclipse.core.resources/.history). 

里面有一堆文件夹,如 3e、2f、1a、ff 等。每个文件夹都有几个名为“2054f7f9a0d30012175be7013ca49f5b”的文件。我能够使用我知道将在文件中的关键字执行递归 grep 并返回文件名列表(grep -R -l 'KEYWORD'),现在我不知道如何按最近对它们进行排序修改的。

任何帮助都会很棒,谢谢!

4

1 回答 1

1

你可以试试:

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将重定向写入开头,在这种情况下patterngrep如果模式位于最后一个位置,则更简单地更改...

如果要检查带有修改时间的文件名列表,可以将上述命令分解为:

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-像第一个示例中那样。

于 2013-06-26T19:37:17.903 回答