Obtenir tous les fichiers qui ont été modifiés à une date spécifique

20

Est-il possible de trouver tous les phpfichiers dans un certain répertoire qui ont été modifiés à une certaine date

j'utilise

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

pour obtenir des fichiers modifiés au cours des 28 derniers jours, mais je n'ai besoin que de fichiers qui ont été modifiés à la date suivante: 2011-02-08

Roland
la source

Réponses:

22

Sur les versions récentes de find(par exemple GNU 4.4.0), vous pouvez utiliser l' -newermtoption. Par exemple, pour rechercher tous les fichiers qui ont été modifiés le 08/02/2011

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

Notez également que vous n'avez pas besoin de diriger dans grep pour trouver des fichiers php car find peut le faire pour vous dans l' -nameoption.

Jetez un oeil à cette réponse SO pour plus de suggestions: Comment utiliser 'find' pour rechercher des fichiers créés à une date spécifique?

dogbane
la source
4

Chose ennuyeuse, il n'y a aucun moyen direct avec la norme find. Les versions récentes de findsur les systèmes GNU (par exemple Linux non intégré, Cygwin) et certains * BSD ont des options telles que -newermtcomparer une date de fichier avec une date précise .

Avec la norme find, tout ce que vous pouvez faire est de comparer la date du fichier avec la date actuelle ( -mtime) ou avec un fichier fixe. La date actuelle n'est généralement pas utile dans ce cas (elle compte à rebours à partir du moment où vous exécutez la findcommande, alors que la plupart des applications nécessitent une date de calendrier). Cela vous laisse le fardeau de créer des fichiers temporaires pour définir une plage.

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Gilles 'SO- arrête d'être méchant'
la source
2

Vous avez déjà presque la bonne commande, pour les versions findqui ne vous permettent pas d'utiliser des dates:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

En général, for find- n signifie moins que , n signifie égal , + n signifie "plus que". Traditionnel finda quelques exceptions, mais GNU findet d'autres versions plus récentes comme BSD / Mac OS X les ont corrigées. (Gardez cela à l'esprit si vous vous trouvez sur un Solaris ou un autre système Unix commercial.)

geekosaure
la source
1

Avec, zshvous pouvez utiliser la fonctionage pour imprimer uniquement les noms des fichiers qui ont été modifiés à une certaine date:

âge de chargement automatique
print -rl - * .php (.e: age 2011/02/08 :)

ou, si vous souhaitez effectuer une recherche récursive:

âge de chargement automatique
setopt extendedglob
print -rl - ** / *. php (.e: age 2011/02/08 :)
don_crissti
la source