私は特定の文字列を含み、過去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つの部分に分けてみましょう。
過去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
grep -Fl
答え2
zsh
シェルから:
grep -l -F -i 'string' ~/**/*(.Dmm-2)
...whereは**
サブディレクトリと再帰的に一致します。ここで、.D
inは(.Dmm-2)
「通常のファイル(.
)のみが一致し、隠されたファイル(D
)は一致しません」を意味し、wheremm-2
は「過去2分間に変更されました」を意味します。