web-dev-qa-db-ja.com

日付範囲内に作成されたすべてのファイル内のGrep

私はUbuntu OSを使用しています。日付範囲2012年5月28日から2012年5月30日までに作成されたすべてのログファイル内でWord(XYZなど)をgrepします。

それ、どうやったら出来るの?

25

これはBantharのソリューションとは少し異なりますが、-newermtをサポートしないfindのバージョンで動作し、xargsコマンドの使用方法を示します。非常に便利なツール。

findコマンドを使用して、「特定の年齢の」ファイルを見つけることができます。これにより、5〜10日前に変更されたすべてのファイルが検出されます。

 find /directory -type f -mtime -10 -mtime +5

それらのファイルで文字列を検索するには:

 find /directory -type f -mtime -10 -mtime +5 -print0 |
   xargs -0 grep -l expression

-execスイッチを使用することもできますが、xargsの方が読みやすいと思います(また、パフォーマンスもよく向上しますが、この場合はおそらくそうではありません)。

-0フラグは、this is my filenameなどのスペースが埋め込まれたファイルでこのコマンドを操作できるようにするためにあります。)

コメント内の質問の更新

findに複数の式を指定すると、それらはANDで結合されます。例えば、あなたが尋ねるなら:

find . -name foo -size +10k

...findは、(a)foo(b)という名前の両方のファイルのみを返します10キロバイト。同様に、次を指定した場合:

find . -mtime -10 -mtime +5

...findは、(a)10日前より新しいand(b)5日前より古いファイルのみを返します。 。

たとえば、私のシステムでは現在次のようになっています。

$ date
Fri Aug 19 12:55:21 EDT 2016

次のファイルがあります。

$ ls -l
total 0
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2
-rw-rw-r--. 1 lars lars 0 Aug  5 00:00 file3

「5日以上前に変更されたファイル(-mtime +5)」を要求すると、次のメッセージが表示されます。

$ find . -mtime +5
./file3
./file2

しかし、「5日以上前、10日以内に変更されたファイル」(-mtime +5 -mtime -10)を要求すると、次のようになります:

$ find . -mtime +5 -mtime -10
./file2
34
larsks

Grepと find を組み合わせます。

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
15
Piotr Praszmo