在您的主目录中搜索最近 2 分钟内最后修改的包含特定字符串的文件

Luc*_*uca 5 grep debian find date files

我正在我的主目录中搜索在过去两分钟内修改的文件,这些文件也包含某个字符串。我试过这个命令:

 find -type d -mmin -2 -ls | grep -Ril "mystring" 
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但显然它只打印内部包含给定字符串的文件,而不是 2 分钟前最后修改的包含该字符串的文件。似乎没有执行命令的第一部分。

roa*_*ima 11

您对自己的建议进行了很好的尝试

find -type d -mmin -2 -ls | grep -Ril "mystring"
Run Code Online (Sandbox Code Playgroud)

这将识别-type d在过去两分钟内修改过的目录 ( ) 而不是文件 ( -type f)。管道-lsto的输出grep通常会在生成的文件名中搜索mystring. 但是,在这种情况下,该-R标志会更改 的行为grep并忽略您的文件名列表,而是搜索当前目录及其下方的每个文件。

所以,让我们把问题分成两部分

  1. 在您的主目录中搜索最近 2 分钟内最后修改的文件

    find ~ -type f -mmin -2
    
    Run Code Online (Sandbox Code Playgroud)
  2. [文件] 包含某个字符串

    grep -Fl 'certain String' {files...}
    
    Run Code Online (Sandbox Code Playgroud)

现在你需要把它们放在一起。的{}是用于通过将所生成的文件名的占位符find从步骤1,和后+表明{}可以重复多次,即几个文件名

    find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Run Code Online (Sandbox Code Playgroud)

更改greptoecho grep将显示find命令正在运行的内容;这可能是一种有用的调试技术:

    find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Run Code Online (Sandbox Code Playgroud)

请考虑运行man findman grep找出各种选项是什么,例如-F-lin grep -Fl,否则您将无法从设置的练习中学到任何东西;你只是在复制一个答案。