Esegui un diff tra file locali e remoti


39

Sono connesso su un host tramite sshe vorrei confrontare (diciamo con diff) un certo file di configurazione con la sua controparte su un altro host, anch'esso accessibile via ssh, senza dover scaricare manualmente il file remoto prima di eseguire il diff.


È possibile montare la directory remota utilizzando SSHFSe quindi accedervi come se fosse locale.
Barmar,

Risposte:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

fonte


1
La pipe non scaricherà solo i risultati di cat, che in realtà sono solo il file originale?
Stijn de Witt,

1
il pipe spingerà il risultato del sshcomando remoto su quello diffche è in attesa di confrontare stdincon localfile.
fduff,

1
Forse sto interpretando male il requisito 'senza dover scaricare il file remoto'. Immagino che OP significhi "senza dover scaricare manualmente il file remoto". :) EDIT: Ah, sei l'OP. :)
Stijn de Witt,

@StijndeWitt, sì, volevo evitare di dover prima scp il file remoto e poi fare la diff ..
fduff

18

Provare:

diff local_file <(ssh user@server 'cat remote_file')

o usando vimdiff:

vimdiff local_file scp://server//path/to/remote_file

Funziona diff local_file <(ssh user@server 'cat remote_file')solo con SSH senza password? Non riesco a ricevere una richiesta di password con esso ...
sdbbs,

1
@sdbbs: la sostituzione del processo è stata eseguita in background e l'output standard viene scritto nella pipe denominata (o pipe anonima denominata), quindi non viene richiesta la password. Provare cat <(ssh user@server 'cat remote_file')e cat < <(ssh user@server 'cat remote_file')vedere le differenze.
cuonglm,

9

Forse questo non è utile nel tuo caso esatto, ma spesso lo uso semplicemente

sum -r

su ogni macchina e confrontare manualmente i checksum. Ciò consente il confronto di file anche quando non sono raggiungibili tramite una connessione ssh. Ovviamente, tutto ciò che risponde è "sono identici", ma spesso è sufficiente per le mie esigenze. Inoltre, consente di verificare facilmente che un singolo file sia lo stesso su 3 o 4 o più macchine.


2
Posso immaginare che per file di grandi dimensioni o connessioni lente, questo potrebbe essere molto utile. Salva il download dell'intero file per quando i file sono effettivamente diversi. Uno scripter Bash migliore di me probabilmente può combinare questa risposta con le risposte sopra che coinvolgono un telecomando catper eseguire effettivamente il catcomando solo quando è stato determinato che i file differiscono.
Stijn de Witt,

1
Il comando info coreutils 'sum invocation'dice, tra l'altro: "'somma' è fornita per compatibilità; il programma 'cksum' (vedere la sezione successiva) è preferibile in nuove applicazioni."
Teemu Leisti,

1

Se preferisci un approccio più visivo nella tua sessione terminale. Il comandante di mezzanotte ha un'opzione di file system remoto (opzione collegamento SFTP ... nel menu) e un'opzione di confronto dei file visivi. Non è installato di default sulla maggior parte dei sistemi Linux ma è disponibile nella maggior parte dei repository di base. passi:

  1. Avvia il comandante di mezzanotte (comando:) mcnella cartella contenente il file da confrontare
  2. Dall'altro lato (ad esempio il menu Destro ) creare un collegamento sftp all'altro server nella stessa cartella ( sftp://<user>@<servername>/<path>).
  3. Utilizzando il instasto selezionare / evidenziare i file da confrontare. ( tabcambia tra pannello sinistro e destro).
  4. Nel menu dei comandi , seleziona Confronta file

Nota: è possibile accedere al menu del comandante di mezzanotte utilizzando il mouse nella sessione del terminale. Ciò che non funziona F9ti porta anche nel menu.

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.