Grep dans tous les fichiers créés dans la plage de dates

Je suis sur le système d’exploitation Ubuntu. Je veux écrire un mot (par exemple XYZ) dans tous les fichiers journaux créés entre le 28 mai 2012 et le 30 mai 2012.

Comment je fais ça?

C’est un peu différent de la solution de Banthar, mais cela fonctionnera avec les versions de find qui ne supportent pas -newermt et montre comment utiliser la commande xargs , qui est un outil très utile.

Vous pouvez utiliser la commande find pour localiser les fichiers “d’un certain âge”. Cela trouvera tous les fichiers modifiés entre 5 et 10 jours:

  find /directory -type f -mtime -10 -mtime +5 

Pour rechercher ensuite une chaîne dans ces fichiers:

  find /directory -type f -mtime -10 -mtime +5 -print0 | xargs -0 grep -l expression 

Vous pouvez également utiliser le commutateur -exec , mais je trouve xargs plus lisible (et il sera souvent plus performant, mais peut-être pas dans ce cas).

(Notez que l’indicateur -0 est là pour permettre à cette commande d’opérer sur des fichiers avec des espaces incorporés, comme this is my filename .)

Mise à jour pour la question dans les commentaires

Lorsque vous fournissez plusieurs expressions à find , elles sont regroupées. Par exemple, si vous demandez:

 find . -name foo -size +10k 

find ne retournera que les fichiers à la fois (a) nommés foo et (b) supérieurs à 10 kilo-octets. De même, si vous spécifiez:

 find . -mtime -10 -mtime +5 

find ne renverra que les fichiers qui sont (a) plus récents que 10 jours auparavant et (b) plus anciens que 5 jours auparavant.

Par exemple, sur mon système, il est actuellement:

 $ date Fri Aug 19 12:55:21 EDT 2016 

J’ai les fichiers suivants:

 $ 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 

Si je demande “les fichiers modifiés il y a plus de 5 jours ( -mtime +5 ), j’obtiens:

 $ find . -mtime +5 ./file3 ./file2 

Mais si je demande “des fichiers modifiés il y a plus de 5 jours mais il y a moins de 10 jours” ( -mtime +5 -mtime -10 ), j’obtiens:

 $ find . -mtime +5 -mtime -10 ./file2 

Combinez grep avec find :

 find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \; 

find ne semble pas avoir d’options permettant de spécifier des dates spécifiques pour la comparaison d’horodatage (au moins, la version de mon ordinateur portable ne le fait pas – il peut y avoir d’autres versions et / ou d’autres outils qui fonctionnent de la même manière). utiliser le nombre de jours. Donc, à partir de 2012/06/05, vous voulez trouver des fichiers de plus de 9 jours mais plus de 6 jours:

 find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ