我有一个包含大量文件的目录。我正在尝试搜索位于至少一个文件中的文本。该文本可能位于较新的文件之一中。执行此操作的命令是什么?我认为它看起来像ls -t | head -5 | grep abaaba
.
例如,如果我有 5 个文件从以下位置返回ls -t | head -5
:-file1、file2、file3、file4、file5,我需要知道其中哪些文件包含abaaba
.
目前还不清楚您要做什么。但我认为效率是您的主要目标。我会使用类似的东西:
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 天以上。
如果您只是以交互方式执行此操作,并且您知道文件名中没有空格,那么您可以这样做:
grep abaaba $(ls -t | head -5) # DO NOT USE THIS IN A SCRIPT
如果将其写在别名中或以供将来重复使用,请以“正确”的方式进行,这需要更多的输入,但这不会破坏文件名中的空格和其他内容。