On a souvent besoin de lister les fichiers qui ont été modifiés depuis une date donnée dans un répertoire et ses sous-répertoires, pour les sauvegarder ou pour les transférer. Comme on ne peut pas le faire avec la commande "ls" habituelle, il faut utiliser la commande "find", dont les arguments sont plutôt compliqués.
J'ai écrit un shell script qui enveloppe cette commande, et qui permet d'obtenir cette liste de fichiers modifiés très simplement. Il fonctionne sous Unix (HP-UX) et sous Linux (Ubuntu).
Le fichier de commande dirchanges.sh :
#!/bin/sh
# dirchanges.sh - Lister par ordre alphabetique tous les fichiers du repertoire courant,
# modifies depuis le nombre de jours specifie
# arg1: nombre de jours (defaut=1)
# arg2: optionnel, masque pour filtrer la liste
#
# 21-08-2009 Richard Goutorbe
# http://www.montpellier-informatique.com/
# Ce code peut etre reproduit librement a condition que cette entete
# soit preservee. Tout changement apporte au code original doit etre signale clairement.
# This code may be freely distributed as long as this header
# is preserved. Changes to the code should be clearly indicated.
FTMP=/tmp/dirchanges.sh.$$.tmp
DAYS=1
if [ -n "$1" ] ; then
DAYS=$1
fi
find . -type f -mtime -$DAYS -printf '%-40p\tCmCHCS\t%6s bytes\n'|sort > $FTMP
if [ -n "$2" ] ; then
grep "$2" $FTMP
else
cat $FTMP
fi
rm $FTMP
Son utilisation est très simple :
- Aller dans le répertoire à lister et taper dirchanges.sh pour voir les fichiers modifiés dans la journée.
- Pour voir les fichiers modifiés depuis un certain nombre de jours taper dirchanges.sh ce_nombre.
Par exemple: dirchanges.sh 2 pour lister les fichiers modifiés depuis 2 jours.
- Pour ne voir que les fichiers dont le nom correspond à un certain masque, taper ce masque après le nombre de jours (entre des apostrophes).
Par exemple: dirchanges.sh 2 '*.txt' pour lister les fichiers textes modifiés depuis 2 jours.
Exemple de liste produite par dirchanges.sh :
./htdocs/blog/wiki.d/.flock 20090821T100851 0 bytes
./htdocs/index.htm 20090820T150029 9417 bytes
./htdocs/predator/en/ico/newversion.png 20090820T115719 8216 bytes
./htdocs/predator/en/wiki.d/.flock 20090821T101422 0 bytes
./htdocs/predator/en/wiki.d/Main.HomePage 20090820T115735 4100 bytes
./htdocs/predator/en/wiki.d/Main.RecentChanges 20090820T115735 1909 bytes
./htdocs/predator/en/wiki.d/Site.AllRecentChanges 20090820T115747 1980 bytes
./htdocs/predator/fr/ico/newversion.png 20090820T120350 7583 bytes
./htdocs/predator/fr/wiki.d/.flock 20090821T100154 0 bytes
./htdocs/predator/fr/wiki.d/Main.HomePage 20090820T120404 6909 bytes
./htdocs/predator/fr/wiki.d/Main.RecentChanges 20090820T120404 1694 bytes
./htdocs/predator/fr/wiki.d/Site.AllRecentChanges 20090820T120416 1837 bytes
./logs/www.montpellier-informatique.com-access.log 20090821T101641 58703264 bytes
./logs/www.montpellier-informatique.com-error.log 20090821T091853 706930 bytes
A voir aussi :
J'ai écrit une commande équivalente pour Windows: