web-dev-qa-db-fra.com

Linux: utilisation de find pour localiser des fichiers antérieurs à <date>

find a un bon support pour trouver les fichiers les plus modifiés il y a moins de X jours, mais comment puis-je utiliser find pour localiser tous les fichiers modifiés après une certaine date?

Je ne trouve rien dans la page de manuel find pour le faire, uniquement pour comparer avec un autre temps de fichiers ou pour vérifier les différences entre le temps créé et maintenant. La création d'un fichier avec le temps souhaité et la comparaison sont-elles la seule façon de procéder?

33
DrStalker

Si vous n'avez que "-newer file", vous pouvez prendre cette solution:

touch -t 201003160120 some_file
find . -newer some_file

toucher de l'homme:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

En supposant que votre toucher a cette option (le mien est tactile 5,97).

19
Krzysztof Krasoń

Non, vous pouvez utiliser une chaîne de date/heure.

De man find:

-newerXY référence
Compare l'horodatage du fichier actuel avec référence. L'argument de référence est normalement le nom d'un fichier (et l'un de ses horodatages est utilisé pour la comparaison) mais il peut également s'agir d'une chaîne décrivant une heure absolue. X et Y sont des espaces réservés pour d'autres lettres, et ces lettres sélectionnent l'heure appartenant à la façon dont la référence est utilisée pour la comparaison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

Exemple:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

Pas directement lié à la question, mais pourrait être intéressant pour certains qui trébucheront ici.

La commande find ne prend pas directement en charge le paramètre -older pour rechercher des fichiers antérieurs à une date requise, mais vous pouvez utiliser la déclaration negate (à l'aide d'un exemple de réponse accepté):

touch -t 201003160120 some_file
find . ! -newer some_file

renverra les fichiers plus ancien que la date fournie.

25
nEJC
find <dir> -mtime -20

cette commande find trouvera les fichiers modifiés au cours des 20 derniers jours.

  • mtime -> modifié (atime = accédé, ctime = créé)
  • -20 -> moins de 20 jours (20 exactement 20 jours, +20 plus de 20 jours)

Vous pouvez ajouter des limitations supplémentaires comme:

find <dir> -mtime -20 -name "*.txt"

comme avant, mais ne trouve que les fichiers se terminant par '.txt'.

10
markus_b

Juste pour ajouter - vous pouvez même utiliser deux arguments newermt pour rechercher dans un intervalle de temps:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

pour retrouver tous les fichiers de mars 2007.

5
MortenSickel

Vous pouvez utiliser un script comme celui-ci

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

Enregistrez-le dans votre $ PATH en tant que "nouveau" et rendez-le exécutable.

Ensuite, vous pouvez trouver un fichier modifié après une certaine date comme ceci:

newerthan "2010-03-10"

ou

newerthan "last year"

ou

newerthan "yesterday"

Cela devrait faire ce que vous voulez. Je ne pense pas qu'il existe un moyen intégré pour y parvenir autrement.

1
Richard Holloway
find ! -newermt “<DATE>”

comme ça:

find ! -newermt “jan 01 2015” 

Cela vous donnera des fichiers antérieurs au 01-01-2015 dans votre répertoire actuel.

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/

1
Muzaffar Mahmood

si votre date est formatée de façon à ce qu'elle puisse être comparée,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
0
user37841