web-dev-qa-db-fra.com

Récupère tous les fichiers modifiés au cours des 30 derniers jours dans un répertoire

CentOS. Besoin de trouver des fichiers modifiés dans les 30 derniers jours pour voir si certains d'entre eux ont été infectés par des logiciels malveillants.

J'ai essayé ceci:

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

Mais au lieu des 30 derniers jours, il semble avoir tout trouvé. 22 000 fichiers.

32
Buttle Butkus

Quelques questions

  • Vous ne le limitez pas aux fichiers. Ainsi, lorsqu'il trouvera un répertoire correspondant, il répertoriera tous les fichiers qu'il contient.
  • Vous ne pouvez pas utiliser > dans -exec sans quelque chose comme bash -c '... > ...'. Bien que le > va écraser le fichier, vous voulez donc rediriger la totalité de find de toute façon plutôt que chaque -exec.
  • +30 est older que 30 jours, -30 serait modifié au cours des 30 derniers jours.
  • -exec n'est vraiment pas nécessaire, vous pouvez tout lister avec divers -printf options.

Quelque chose comme ci-dessous devrait fonctionner

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

Exemple avec -printf

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

Cela listera les fichiers au format "propriétaire du groupe d'autorisations heure date nom_fichier". -printf est généralement préférable à -exec dans les cas où vous n'avez rien de compliqué à faire. Ceci est dû au fait qu’il fonctionnera plus rapidement car il n’aurait pas à exécuter de sous-shell pour chaque -exec. Selon la version de find, vous pourrez également utiliser -ls, qui a un format similaire à celui ci-dessus.

92
BroSlow