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

je suis sur Ubuntu en OS. Je veux ajouter un mot (disons XYZ) dans tous les fichiers journaux qui sont créés entre le 28-mai-2012 et le 30-mai-2012.

Comment je fais ça?

21
demandé sur Peter Mortensen 2012-06-05 17:24:07

3 réponses

C'est un peu différent de la solution de Banthar, mais cela fonctionnera avec des versions de find qui ne prennent pas en charge -newermt et il montre comment utiliser le xargs commande, qui est un outil très utile.

Vous pouvez utiliser le find commande rechercher les fichiers "d'un certain âge". Cela permettra de trouver tous les fichiers modifiés entre 5 et 10 jours:

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

pour ensuite rechercher dans ces fichiers une chaîne de caractères:

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

vous pouvez aussi utiliser le -exec commutateur, mais je trouve xargs plus lisible (et il effectue souvent des meilleures, aussi, mais peut-être pas dans ce cas).

(notez que le -0 drapeau est-il de laisser cette commande agir sur des fichiers avec des espaces, tels que this is my filename.)

mise à Jour de la question dans les commentaires

lorsque vous donnez des expressions multiples à find, ils sont réunis. E. g., si vous demandez:

find . -name foo -size +10k

...find ne retournera que les fichiers qui sont tous les deux (a) nommés fooet (b) plus grand que 10 kbytes. De même, si vous spécifiez:

find . -mtime -10 -mtime +5

...find retournera seulement les fichiers qui sont (a) la plus récente que celle d'il y a 10 jours et (b)Plus de 5 jours.

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

$ 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 "fichiers modifiés de plus de 5 jours (-mtime +5) je obtenir:

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

Mais si je demande "fichiers modifiés de plus de 5 jours, mais moins de 10 jours" (-mtime +5 -mtime -10), j'obtiens:

$ find . -mtime +5 -mtime -10
./file2
29
répondu larsks 2016-08-19 16:58:45

combinez grep avec trouver:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
14
répondu Piotr Praszmo 2012-06-05 13:45:48

find ne semble pas avoir d'options où vous pouvez spécifier des dates spécifiques pour la comparaison des horodateurs (au moins la version sur mon ordinateur portable ne le fait pas - il peut y avoir d'autres versions et/ou d'autres outils qui fonctionnent de manière similaire), donc vous devrez utiliser le nombre de jours. Donc, à partir de 2012/06/05, vous voulez trouver des fichiers plus récents que 9 jours mais plus vieux que 6 jours:

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
-1
répondu twalberg 2012-06-05 13:50:13