[shell] Comparer deux arborescences

dimanche 13 septembre 2015

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

 
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

 
-----
 
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 wink



[shell] Comparer deux arborescences

0 commentaires:

Enregistrer un commentaire

 

Lorem

Ipsum

Dolor