在您的主目錄中搜尋最近 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表示“在最後兩分鐘內修改”。

相關內容