過去2分間に最後に変更された特定の文字列を含むファイルをホームディレクトリで検索します。

過去2分間に最後に変更された特定の文字列を含むファイルをホームディレクトリで検索します。

私は特定の文字列を含み、過去2分間に修正されたファイルを見つけるために私のホームディレクトリを検索しています。私は次のコマンドを試しました。

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

動作しているように見えますが、内部的に与えられた文字列を含むファイルのみを印刷し、2分前に最後に変更され、その文字列を含むファイルは印刷されません。コマンドの最初の部分が実行されていないようです。

答え1

あなたの提案に従って良い試みをしました。

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

これは-type dディレクトリ()を識別しますが、過去2分間に変更されたファイル()は識別しません-type f。パイプ-lsで接続された出力はgrep通常、生成されたファイル名を検索しますmystring。ただし、この場合、この-Rフラグは動作を変更し、grepファイル名のリストを無視し、代わりに現在のディレクトリとすべての文書を検索します。

それでは、質問を2つの部分に分けてみましょう。

  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' {} +

grep次に変更すると、コマンドが実行されているecho grep内容が表示されますfind。これは便利なデバッグ技術になります。

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

たとえば、 でさまざまなオプションが何であるかを調べ、man find実行してみます。そうでなければ、設定された練習で何も学ぶことはできません。man grep-F-lgrep -Fl

答え2

zshシェルから:

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

...whereは**サブディレクトリと再帰的に一致します。ここで、.Dinは(.Dmm-2)「通常のファイル(.)のみが一致し、隠されたファイル(D)は一致しません」を意味し、wheremm-2は「過去2分間に変更されました」を意味します。

関連情報