Come confrontare le differenze tra le directory (linux)


24

Ho due directory: una dal backup precedente e la seconda dal backup più recente. Come faccio a confrontare quali modifiche sono state apportate ai file nella directory dal più recente backup su Linux? Inoltre, come posso visualizzare le modifiche ad esempio nei file di testo e php - sto pensando a qualcosa come la cronologia delle revisioni su Wikipedia in cui vedi la versione precedente su un lato dello schermo e la versione più recente sull'altro e le modifiche sono evidenziate. Come ottengo qualcosa del genere?

modifica: come faccio a confrontare anche la directory remota con locale?

Risposte:


35

Dalla pagina man diff:

Se sia da file che a file sono directory, diff confronta i file corrispondenti in entrambe le directory, in ordine alfabetico; questo confronto non è ricorsivo a meno che non sia data l'opzione -r o --recursive. diff non confronta mai il contenuto effettivo di una directory come se fosse un file. Il file che è stato completamente specificato potrebbe non essere un input standard, poiché l'input standard è senza nome e la nozione di '' file con lo stesso nome '' non si applica.

Quindi, per confrontare le directory: diff --brief -r dir1 dir2

Per confrontare i file fianco a fianco: diff --side-by-side file1 file2


molto bello, ci proverò
Phil,

... mi chiedo come confrontare la directory remota con quella locale?
Phil

1
Dovresti montare la directory remota sul computer locale. Tuttavia, puoi confrontare i file in remoto in questo modo: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - side-by-side / path-to-some-file - Un'altra cosa, il comando 'sdiff' funziona come 'diff - side-by-side' se vuoi salvare qualche digitazione.
Sean Staats,

2
Utilizzare NFS per montare la directory remota. Sul server remoto (server-b), modifica / etc / exports e inserisci quanto segue: / percorso / di / directory / to / share server-a.ip.address (ro, no_root_squash) Avvia NFS su server-b (/etc/init.d/nfs start) Montare sul server locale (server-a) aggiungendo quanto segue a / etc / fstab: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Quindi sul server-a, mkdir / mnt / server-b; mount / mnt / server-b Grazie per il voto.
Sean Staats,

2
È possibile utilizzare sshfsper creare una directory di rete temporanea ad hoc, anziché utilizzare NFS.
Dan Andreatta,

3

assumendo:

  • siamo www1accesi, confrontandoli con il telecomandowww2
  • esiste un'autenticazione con chiave pubblica da locale www1a remotowww2
  • confrontiamo come lo stesso utente su locale www1e remotowww2
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 

3

Volete davvero combinare il potere di rsyncridurre il consumo di larghezza di banda con il potere di diffdarvi differenze flessibili e ottimali.

Quindi qualcosa del genere:

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

Immagino che potresti modificarlo un po 'se lo facessi spesso usando rsyncinvece che cpnella prima riga - ovviamente nell'ultima riga hai la piena potenza di diffformattarlo come preferisci. Probabilmente con y nel caso dei PO

Unico inconveniente di questo approccio è che si finisce per utilizzare il doppio dello spazio locale, ma a meno di $ 1 / concerto a chi importa?


cp --reflink=auto --sparse=alwaysnon usare spazio per la copia a seconda del FS sottostante.
Tom Hale,

1

Fare diff old_dir new_dir > diff.txtper le differenze affiancate sullo stesso server.

Per i file remoti:

Ad esempio: ABC è un server esistente e XYZ è il tuo server remoto e il nome della directory è 123.

Passaggio 1: Rinominare la directory esistente 123 su ABC Server come 123_ABC.

ABC:/Home > mv 123 123_ABC

Passaggio 2: creare una nuova directory sul server ABC:

ABC: > mkdir 123_XYZ

Passaggio 3: copiare tutti i file dalla directory 123 sul server XYZ alla directory 123_XYZ sul server ABC:

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

Questo copierà tutti i file dalla directory sul tuo server XYZ alla directory del tuo server ABC / 123_XYZ.

Step: 4: fai la diff tra entrambe le directory:

Ora vai al server ABC ed esegui le differenze tra 123_ABC e 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

Il comando sopra salverà i risultati diff in diff.txt nello stesso percorso.

È quindi possibile confrontare le differenze.

Grazie,

Mehul


0

AIDE Advanced Intrusion Detection Environment (AIDE) è un controllo dell'integrità dei file per i sistemi operativi UNIX. Il suo scopo è fornire report sull'integrità dei dati sui file system supportati. Eseguendo AIDE più volte sull'host di destinazione è possibile determinare quali file stanno cambiando. Eseguendo AIDE più volte su host diversi è possibile determinare quali file e autorizzazioni sono diversi. Quindi utilizzare uno strumento gui diff sui file "diversi" segnalati.

Oppure usa uno strumento gui diff come meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff o xxdiff. La maggior parte farà differenze di directory oltre a differenze di file. Dovrai montare l'unità remota usando NFS, SMBFS o SSHFS come altri hanno già detto.


0

Oppure puoi utilizzare due file con l'elenco dei file in uscita. E poi confronta questi due file. Per esempio:

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

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

Scarica uno dei file.

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

a FILE.TXT

Usa diff ( diff -y remote-files local-files > diff-files) per confrontarli fianco a fianco. Apri i file diff e controllalo. Ogni riga con> indica un file diverso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.