web-dev-qa-db-ja.com

ディレクトリ内の過去30日間に変更されたすべてのファイルを取得する

CentOS。過去30日間に変更されたファイルを見つけて、それらのいずれかがマルウェアに感染しているかどうかを確認する必要があります。

私はこれを試しました:

root@server [/home/someuser/public_html/]# find . -mtime +30
 -exec ls -l {} > last30days.txt \;

しかし、過去30日間ではなく、すべてが見つかったようです。 22,000ファイル。

32
Buttle Butkus

いくつかの問題

  • ファイルに限定しているわけではないため、一致するディレクトリが見つかると、その中のすべてのファイルがリストされます。
  • >のようなものがないと、-execbash -c '... > ...'を使用できません。 >はファイルを上書きしますが、-execではなく、find全体をリダイレクトする必要があります。
  • +30olderが30日よりも長く、-30は過去30日間で変更されます。
  • -execは実際には必要ありません。さまざまな-printfオプションですべてをリストできます。

以下のようなものが動作するはずです

find . -type f -mtime -30 -exec ls -l {} \; > last30days.txt

-printfを使用した例

find . -type f -mtime -30 -printf "%M %u %g %TR %TD %p\n" > last30days.txt

これにより、「権限所有者グループの日時ファイル名」の形式でファイルが一覧表示されます。複雑なことを何もする必要がない場合は、-printf-execより一般的に望ましいです。これは、-execごとにサブシェルを実行する必要がないため、実行速度が速くなるためです。 findのバージョンによっては、-lsを使用することもできます。これは上記と同様の形式です。

92
BroSlow