Skip to content
Tags

Un find sur une date particulière

July 2, 2009

Aujourd’hui, un collègue de bureau connaissant mon hobby de la commande Unix m’a posé cette colle: comment retrouver les fichiers modifié à une date d ?

Je me suis penché sur la commande find en recherchant la bonne option: à ma grande surprise, l’option -mtime ne supporte pas une date mais uniquement un nombre relatif de jours par rapport à la date actuelle. Je pensais contourner le problème avec les options -newer et -older mais malheureusement la dernière option n’existe pas. Que faire? Passer pour un imbécile? Certainement pas. Unix, c’est comme un jeu de LEGO, on a toutes les pièces nécessaires pour faire tout ce qu’on veut. Encore faut-il avoir un peu d’astuce pour bien emboîter les pièces.

Du coup, j’ai écrit le code suivant:

#!/bin/ksh

DT1=${1}0000
DT2=${1}2359
DTFILE1=`mktemp`
DTFILE2=`mktemp`

touch -t $DT2 $DTFILE2
touch -t $DT1 $DTFILE1
for i in `find $2 -type f -print` ; do
        if [ $i -nt $DTFILE1 ] ; then
                if [ $i -ot $DTFILE2 ] ; then
                        echo $i
                fi
        fi
done
rm -f $DTFILE1
rm -f $DTFILE2

Et voilà, le tour est joué. Si le script s’apelle findday (c’est joli comme nom de script), il suffit de taper findday <date> <directory> avec:

  • <date> la date exprimé YYYYMMDD (année, mois, jour).
  • <directory> le répertoire où doit démarrer la recherche (la commande find va chercher dans les sous-répertoires).

Ainsi findday 20080618 ~wrey va rechercher tous les fichiers modifiés le 18 juin 2008 (2008-06-18) se trouvant dans le répertoire ~wrey (mon répertoire utilisateur) et ses sous-répertoires.

L’intérêt est l’utilisation de la commande find qui ne va renvoyer que les fichiers (pas les noms de répertoires) modifiés à la date spécifiée. Voilà un joli script qui m’a demandé quelques minutes de réflexion!

Je préfère prévenir les puristes: le code n’est pas optimisé (on aurait dû intégrer la recherche des “newer” directement dans la commande find) mais il fait le ménage en sortant et peut être utilisé simultanément par plusieurs utilisateurs; ce qui n’est déjà pas si mal…

Advertisements

From → Other

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: