Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 13-09-2015 15:36:29

vv222
Membre
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : >= Linux 4.5.0 (amd64)
(G)UI : Openbox + ROX
Inscription : 18-11-2013
Site Web

[shell] Comparer deux arborescences

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 = arborecence de référence
##

dir_target="$(realpath "$1")"
dir_source="$(realpath "$2")"

if [ ! -d "${dir_target}" ]; then
  printf 'Erreur !\n'
  printf '%s: répertoire introuvable.\n' "${dir_target}"
fi
if [ ! -d "${dir_source}" ]; then
  printf 'Erreur !\n'
  printf '%s: répertoire introuvable.\n' "${dir_source}"
fi

cd "${dir_target}"

find . -type d | while read dir; do
  if ! [ -e "${dir_source}/$dir" ]; then
    printf 'nouveau répertoire : %s\n' "${dir}"
  fi
done

find . -type f | while read file; do
  if ! [ -e "${dir_source}/$file" ]; then
    printf 'nouveau fichier : %s\n' "${file}"
  fi
done

find . -type f | while read file; do
  if [ -n "$(diff -q "${file}" "${dir_source}/${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

Dernière modification par vv222 (14-09-2015 01:15:40)


Jouer sous Debian ? Facile !

Hors ligne

#2 13-09-2015 18:48:45

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : [shell] Comparer deux arborescences

Ça me paraît un script indispensable.  Merci !  cool

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#3 13-09-2015 19:02:19

vv222
Membre
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : >= Linux 4.5.0 (amd64)
(G)UI : Openbox + ROX
Inscription : 18-11-2013
Site Web

Re : [shell] Comparer deux arborescences

Je n’irais pas jusqu’à le qualifier d’indispensable, mais pour certains cas d’usages il peut être franchement utile en effet wink

Jouer sous Debian ? Facile !

Hors ligne

#4 14-09-2015 01:17:06

vv222
Membre
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : >= Linux 4.5.0 (amd64)
(G)UI : Openbox + ROX
Inscription : 18-11-2013
Site Web

Re : [shell] Comparer deux arborescences

Script corrigé, il ne fonctionnait originellement qu’avec deux chemins absolus, ou avec le chemin du deuxième répertoire (arborescence de  référence) relatif à celui du premier (arborescence modifiée à tester).

Jouer sous Debian ? Facile !

Hors ligne

#5 09-11-2015 12:42:30

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : [shell] Comparer deux arborescences

Salut,


Je suis un peu paumé dans les chemins :

ls -l


total 4
drwxr-xr-x 2 moi encoremoi    6 nov.   9 11:21 arbre1
drwxr-xr-x 2 moi encoremoi    6 nov.   9 11:21 arbre2
-rwxr-xr-x 1 moi encoremoi  911 nov.   9 11:20 fd.sh




premier essai :

./fd.sh arbre1 arbre2

./find-diff.sh: 9: ./fd.sh: realpath: not found




deuxième essai

./fd.sh ./arbre1 ./arbre2

./find-diff.sh: 9: ./fd.sh: realpath: not found




troisième essai

./fd.sh "chemin absoluversarbre1" "chemin absoluversarbre2"

./find-diff.sh: 9: ./fd.sh: realpath: not found




Je dois pas faire c'qu'y fô !  roll


I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

Pied de page des forums