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?
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).
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.
find <dir> -mtime -20
cette commande find trouvera les fichiers modifiés au cours des 20 derniers 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'.
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.
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.
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.
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 }'