我正在我的主目錄中搜尋在過去兩分鐘內修改過的文件,這些文件也包含特定的字串。我嘗試使用這個命令:
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
表示“在最後兩分鐘內修改”。