私はUbuntu OSを使用しています。2012 年 5 月 28 日から 2012 年 5 月 30 日までの日付範囲内に作成されたすべてのログ ファイル内の単語 (XYZ など) を grep したいと考えています。
それ、どうやったら出来るの?
私はUbuntu OSを使用しています。2012 年 5 月 28 日から 2012 年 5 月 30 日までの日付範囲内に作成されたすべてのログ ファイル内の単語 (XYZ など) を grep したいと考えています。
それ、どうやったら出来るの?
これは、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
grep とfindを組み合わせる:
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
find
タイムスタンプの比較のために特定の日付を指定できるオプションがないようです(少なくとも私のラップトップのバージョンにはありません-同様に機能する他のバージョンや他のツールがあるかもしれません)ので、使用する必要があります日数。したがって、2012/06/05 の時点で、9 日より新しく、6 日より古いファイルを検索する必要があります。
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ