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

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

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

 find -type d -mmin -2 -ls | grep -Ril "mystring" 

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

答案1

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

find -type d -mmin -2 -ls | grep -Ril "mystring"

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

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

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

    find ~ -type f -mmin -2
    
  2. [文件] 包含特定字符串

    grep -Fl 'certain String' {files...}
    

现在您需要将它们放在一起。是步骤 1{}生成的文件名的占位符find,尾部+表示{}可以重复多次,即几个文件名

    find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +

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

    find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +

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

答案2

zsh外壳中:

grep -l -F -i 'string' ~/**/*(.Dmm-2)

... where**递归匹配子目录,其中.Din(.Dmm-2)表示“仅匹配常规文件 ( .),但包含隐藏文件 ( D)”,wheremm-2表示“在最后两分钟内修改”。

相关内容