35

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

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

4

3 に答える 3

42

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

...は、(a) 名前があり、 (b) 10 キロバイトより大きいfindファイルのみを返します。同様に、次を指定した場合:foo

find . -mtime -10 -mtime +5

...findは、(a) 10 日前より新しく (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
于 2012-06-05T13:49:09.327 に答える
18

grep とfindを組み合わせる:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
于 2012-06-05T13:45:48.617 に答える
-1

findタイムスタンプの比較のために特定の日付を指定できるオプションがないようです(少なくとも私のラップトップのバージョンにはありません-同様に機能する他のバージョンや他のツールがあるかもしれません)ので、使用する必要があります日数。したがって、2012/06/05 の時点で、9 日より新しく、6 日より古いファイルを検索する必要があります。

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
于 2012-06-05T13:50:13.883 に答える