ホームディレクトリ内で特定の文字列を含む過去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出力を にパイプすると、通常は の生成されたファイル名が検索されます。ただし、この場合、フラグによって の動作が変更され、ファイル名のリストが無視され、代わりに現在のディレクトリとその下にあるすべてのファイルが検索されます。-lsgrepmystring-Rgrep

そこで、問題を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)

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

関連情報