我正在我的主目录中搜索在过去两分钟内修改过的文件,这些文件也包含特定的字符串。我尝试使用这个命令:
find -type d -mmin -2 -ls | grep -Ril "mystring"
它似乎可以工作,但显然它只打印那些内部包含给定字符串的文件,而不是 2 分钟前最后修改的包含该字符串的文件。看起来命令的第一部分没有执行。
答案1
您根据自己的建议进行了很好的尝试
find -type d -mmin -2 -ls | grep -Ril "mystring"
这将识别-type d
在过去两分钟内修改过的目录 ( ) 而不是文件 ( -type f
)。通过管道传输-ls
to的输出grep
通常会在生成的文件名中搜索mystring
.但是,在这种情况下,该-R
标志会更改的行为,grep
并且它会忽略文件名列表,而是搜索当前目录及其下的每个文件。
所以,让我们把问题分成两部分
在您的主目录中搜索最近 2 分钟内最后修改的文件
find ~ -type f -mmin -2
[文件] 包含特定字符串
grep -Fl 'certain String' {files...}
现在您需要将它们放在一起。是步骤 1{}
生成的文件名的占位符find
,尾部+
表示{}
可以重复多次,即几个文件名
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
更改grep
为echo grep
将显示该find
命令正在运行的内容;这可能是一种有用的调试技术:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
请考虑跑步man find
并man grep
找出各种选项是什么,例如-F
和-l
in grep -Fl
,否则您不会从所设置的练习中学到任何东西;你只是复制一个答案。
答案2
在zsh
外壳中:
grep -l -F -i 'string' ~/**/*(.Dmm-2)
... where**
递归匹配子目录,其中.D
in(.Dmm-2)
表示“仅匹配常规文件 ( .
),但包含隐藏文件 ( D
)”,wheremm-2
表示“在最后两分钟内修改”。