Comment comparer les différences entre les répertoires (Linux)

24

J'ai deux répertoires - un de la sauvegarde antérieure et le deuxième de la dernière sauvegarde. Comment comparer les modifications apportées aux fichiers du répertoire à partir de la dernière sauvegarde sous Linux? Aussi, comment afficher les modifications par exemple dans les fichiers texte et php - je pense à quelque chose comme l'historique des révisions sur wikipedia où vous voyez l'ancienne version d'un côté de l'écran et la dernière version de l'autre et les modifications sont mises en évidence. Comment puis-je réaliser quelque chose comme ça?

edit: Comment comparer également le répertoire distant avec le répertoire local?

Phil
la source

Réponses:

35

De la page de manuel diff:

Si à la fois le fichier et le fichier sont des répertoires, diff compare les fichiers correspondants dans les deux répertoires, par ordre alphabétique; cette comparaison n'est récursive que si l'option -r ou --recursive est donnée. diff ne compare jamais le contenu réel d'un répertoire comme s'il s'agissait d'un fichier. Le fichier qui est entièrement spécifié peut ne pas être une entrée standard, car l'entrée standard est sans nom et la notion de «fichier portant le même nom» ne s'applique pas.

Donc, pour comparer les répertoires: diff --brief -r dir1 dir2

Pour comparer des fichiers côte à côte: diff --side-by-side file1 file2

Sean Staats
la source
très cool, je vais essayer
Phil
... je me demande comment comparer un répertoire distant à un répertoire local?
Phil
1
Vous devez monter le répertoire distant sur la machine locale. Cependant, vous pouvez comparer à distance des fichiers comme ceci: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - side-by-side / path-to-some-file - Une autre chose, la commande 'sdiff' fonctionne comme 'diff --side-by-side' si vous voulez enregistrer quelques saisies.
Sean Staats
2
Utilisez NFS pour monter le répertoire distant. Sur le serveur distant (server-b), modifiez / etc / exports et mettez-y les éléments suivants: / path / of / directory / to / share server-a.ip.address (ro, no_root_squash) Démarrez NFS sur server-b (/etc/init.d/nfs start) Montez sur votre serveur local (server-a) en ajoutant ce qui suit dans / etc / fstab: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Ensuite sur server-a, mkdir / mnt / server-b; mount / mnt / server-b Merci pour les votes positifs.
Sean Staats
2
Vous pouvez utiliser sshfspour créer un répertoire en réseau temporaire ad hoc, au lieu d'utiliser NFS.
Dan Andreatta
3

En supposant:

  • nous sommes en www1comparaison avec la télécommandewww2
  • il existe une authentification par clé publique du local www1vers le distantwww2
  • nous comparons comme le même utilisateur sur local www1et distantwww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / exclude_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_this dir> remote.md5"
scp www2: remote.md5.
diff local.md5 remote.md5 
user69366
la source
3

Vous voulez vraiment combiner la puissance de rsyncpour réduire la consommation de bande passante avec la puissance de diffpour vous donner des différences flexibles.

Donc quelque chose comme ça:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Je suppose que vous pourriez modifier un peu cela si vous le faisiez souvent utiliser rsyncau lieu de cpdans la première ligne - évidemment dans la dernière ligne, vous avez le pouvoir de diffle formater comme vous le souhaitez. Probablement avec y dans le cas des PO

L'inconvénient de cette approche est que vous finissez par utiliser deux fois plus d'espace local, mais à moins de 1 $ / gig, peu importe?

ErichBSchulz
la source
cp --reflink=auto --sparse=alwayspour ne pas utiliser d'espace pour la copie en fonction du FS sous-jacent.
Tom Hale
1

Faites diff old_dir new_dir > diff.txtpour les différences côte à côte sur le même serveur.

Pour les fichiers distants:

Par exemple: ABC est un serveur existant et XYZ est votre serveur distant et le nom du répertoire est 123.

Étape 1: renommez le répertoire 123 existant sur le serveur ABC en 123_ABC.

ABC:/Home > mv 123 123_ABC

Étape 2: Créez un nouveau répertoire sur le serveur ABC:

ABC: > mkdir 123_XYZ

Étape 3: copiez tous les fichiers du répertoire 123 sur le serveur XYZ vers le répertoire 123_XYZ sur le serveur ABC:

XYZ/123 > scp * userid@ABC: /123_XYZ

Cela copiera tous les fichiers du répertoire de votre serveur XYZ vers votre répertoire ABC server / 123_XYZ.

Étape: 4: Faites la différence entre les deux répertoires:

Allez maintenant sur le serveur ABC et effectuez une différence entre 123_ABC et 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

La commande ci-dessus enregistrera les résultats diff dans diff.txt dans le même chemin.

Vous pouvez alors comparer les différences.

Je vous remercie,

Mehul

mehul
la source
0

AIDE Advanced Intrusion Detection Environment (AIDE) est un vérificateur d'intégrité des fichiers pour les systèmes d'exploitation UNIX. Son objectif est de fournir des rapports sur l'intégrité des données sur les systèmes de fichiers pris en charge. En exécutant AIDE plusieurs fois sur l'hôte cible, vous pouvez déterminer quels fichiers changent. En exécutant AIDE plusieurs fois sur différents hôtes, vous pouvez déterminer quels fichiers et autorisations sont différents. Utilisez ensuite un outil gui diff sur les fichiers "différents" signalés.

Ou utilisez un outil gui diff comme meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff ou xxdiff. La plupart feront des différences de répertoire en plus des différences de fichier. Vous devrez monter le lecteur distant en utilisant NFS, SMBFS ou SSHFS comme d'autres l'ont mentionné.


la source
0

Ou vous pouvez utiliser deux fichiers avec la sortie de la liste des fichiers. Et puis comparez ces deux fichiers. Par exemple:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Téléchargez l'un des fichiers.

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

à FILE.TXT

Utilisez diff ( diff -y remote-files local-files > diff-files) pour les comparer côte à côte. Ouvrez les fichiers diff et vérifiez-le. Chaque ligne avec> signifie un fichier différent.

Mark Henderson
la source