jeudi 26 janvier 2012

Copie sélective (Part. 2)

Dans la série des copies sélectives, je me lance un nouveau défi.

Je dispose d'un répertoire de travail avec des sous-répertoires, le tout fourmillant de fichiers créés régulièrement. Mon objectif : obtenir une copie de tous les fichiers qui ont été créés il y a moins d'une semaine. L'exercice devient intéressant quand le répertoire de travail contient des centaines de sous-répertoires et encore autant de fichiers.

J'utilise la commande find. Cette commande permet d'obtenir une liste de fichiers. On peut y ajouter plusieurs options de manière à restreindre le résultat.
Nous allons notamment utiliser l'option -mtime qui fonctionne selon la règle suivante :
-mtime +x : renvoie les fichiers créés avant j-x
-mtime -x : renvoie les fichiers créés après j-x

Voici une solution qui marche bien :

find /chemin_source/ -mtime -7 -type f -exec rsync -R {} /chemin_cible/ \;

Si je résume un peu, cela donne ceci :
find /chemin_source/ -mtime -7 -type f : Je cherche, de manière récursive, dans mon chemin source, tous les fichiers qui ont été créés il y a moins de 7 jours.
-exec rsync -R {} /chemin_cible/ \; : Ensuite, je copie tous ces fichiers vers mon chemin cible en reconstruisant leur arborescence à l'identique. Les fichiers et répertoires qui ne correspondent pas aux critères de recherche de mon find sont ignorés.
Ainsi, je peux copier dans un répertoire, tous les nouveaux fichiers de la semaine en respectant leur emplacement.

C'est gagné!

Aucun commentaire:

Enregistrer un commentaire