私はUbuntu OSを使用しています。日付範囲2012年5月28日から2012年5月30日までに作成されたすべてのログファイル内でWord(XYZなど)をgrepします。
それ、どうやったら出来るの?
これは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
Grepと find を組み合わせます。
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;