Le script que je vous propose ici sert à comparer deux arborescences pour repérer par rapport à celle de référence les répertoires/fichiers créés ainsi que les fichiers modifiés.
Je m’en sers essentiellement dans mon projet ./play.it pour repérer les fichiers modifiés/créés lors de sauvegardes ou de modification des options pour des jeux dont je n’ai pas accès au code source.
Voici la bête :
#!/bin/sh -e
##
# compare deux arborescences et retourne les différences
# $1 = arborescence modifiée
# $2 = arborescence de référence
##
if [ ! -d "$1" ] || [ ! -d "$2" ]; then
printf 'Erreur !\n'
printf 'Un des répertoires donnés en argument n’existe pas.\n'
exit 1
fi
cd "$1"
find . -type d | while read dir; do
if ! [ -e "$2/$dir" ]; then
printf 'nouveau répertoire : %s\n' "${dir}"
fi
done
find . -type f | while read file; do
if ! [ -e "$2/$file" ]; then
printf 'nouveau fichier : %s\n' "${file}"
fi
done
find . -type f | while read file; do
if [ -n "$(diff -q "${file}" "$2/${file}" 2>/dev/null)" ]; then
printf 'fichier modifié : %s\n' "${file}"
fi
done
exit 0
##
# compare deux arborescences et retourne les différences
# $1 = arborescence modifiée
# $2 = arborescence de référence
##
if [ ! -d "$1" ] || [ ! -d "$2" ]; then
printf 'Erreur !\n'
printf 'Un des répertoires donnés en argument n’existe pas.\n'
exit 1
fi
cd "$1"
find . -type d | while read dir; do
if ! [ -e "$2/$dir" ]; then
printf 'nouveau répertoire : %s\n' "${dir}"
fi
done
find . -type f | while read file; do
if ! [ -e "$2/$file" ]; then
printf 'nouveau fichier : %s\n' "${file}"
fi
done
find . -type f | while read file; do
if [ -n "$(diff -q "${file}" "$2/${file}" 2>/dev/null)" ]; then
printf 'fichier modifié : %s\n' "${file}"
fi
done
exit 0
Et un exemple d’utilisation :
$ find-diff ~/.local/share/games/planescape-torment /usr/local/share/games/planescape-torment
nouveau répertoire : ./save
fichier modifié : ./torment.log
fichier modifié : ./torment.err
fichier modifié : ./torment.log
fichier modifié : ./torment.err
-----
Vos commentaires et suggestions sont les bienvenus, et si vous réutilisez ce script ça me ferait plaisir de savoir à quoi il peut vous servir
[shell] Comparer deux arborescences
0 commentaires:
Enregistrer un commentaire