過去2分間に変更され、特定の文字列も含むファイルをホームディレクトリで検索しています。私はこのコマンドで試しました:
find -type d -mmin -2 -ls | grep -Ril "mystring"
動作するようですが、明らかに、2分前に最後に変更された文字列を含むファイルではなく、指定された文字列が含まれているファイルのみを印刷します。コマンドの最初の部分が実行されていないようです。
あなたはあなた自身の提案で良い試みをしました
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
を実行することを検討してください。設定したエクササイズから何かを学ぶ。答えをコピーするだけです。
zsh
シェル:
grep -l -F -i 'string' ~/**/*(.Dmm-2)
... どこ **
はサブディレクトリに再帰的に一致し、.D
(.Dmm-2)
は、「通常のファイルのみに一致する(.
)、ただし隠しファイル(D
)を含みます、そしてmm-2
は、「過去2分間に変更された」ことを意味します。