1

我有一个包含大量文件的目录。我正在尝试搜索位于至少一个文件中的文本。该文本可能位于较新的文件之一中。执行此操作的命令是什么?我认为它看起来像ls -t | head -5 | grep abaaba.

例如,如果我有 5 个文件从以下位置返回ls -t | head -5:-file1、file2、file3、file4、file5,我需要知道其中哪些文件包含abaaba.

4

2 回答 2

3

目前还不清楚您要做什么。但我认为效率是您的主要目标。我会使用类似的东西:

ls -t | while read -r f; do grep -lF abaaba "$f" && break;done

这将只打印包含字符串的第一个文件并停止搜索。如果您想查看实际行,请使用 -H 而不是 -l。如果你有正则表达式而不是单纯的字符串 drop -F 这将使 grep 运行速度变慢。

ls -t | while read -r f; do grep -H abaaba "$f" && break;done

当然,如果您想继续搜索,我建议您删除“&& break”。

ls -t | while read -r f; do grep -HF abaaba "$f";done

如果您对时间范围有一些想法,最好尝试查找。

find . -maxdepth 1 -type f -mtime -2 -exec grep -HF abaaba {} \;

您可以在 -mtime 之后提高数字以覆盖过去 2 天以上。

于 2015-07-22T23:53:43.337 回答
0

如果您只是以交互方式执行此操作,并且您知道文件名中没有空格,那么您可以这样做:

grep abaaba $(ls -t | head -5)   # DO NOT USE THIS IN A SCRIPT

如果将其写在别名中或以供将来重复使用,请以“正确”的方式进行,这需要更多的输入,但这不会破坏文件名中的空格和其他内容。

于 2015-07-23T10:33:45.740 回答