oui, quelque chose comme ça, mais pour les annuaires :)
Alexey Timanovsky
Comment voulez-vous dire pour les annuaires, pourrait toujours remplacer cat avec ls
Kyle Brandt
27
Je soupçonne que 'pour les annuaires' signifie faire un diff récursif
Ian Clelland
9
J'ai trouvé que cette technique ne fonctionnait pas pour moi si mon hôte distant avait besoin d'un mot de passe. L'invite de mot de passe ne semblait pas bien fonctionner avec la redirection et n'a pas pu être complétée avec succès. Si vous utilisez des clés ssh, cela ne devrait pas poser de problème.
Adam Franco
2
C'est une excellente solution générale à de nombreux problèmes. Au lieu de 'cat foo', vous pouvez utiliser 'find / foo / bar -type f | en lisant le fichier; echo "**** $ file"; cat "$ file"; done 'et vous auriez une liste des noms de fichiers et du contenu du fichier à diff.
Paul Gear
106
Enfin, j'ai trouvé une excellente solution: vimdiff
Voici un exemple: vimdiff .bash_profile scp: //[email protected]//home/vaibhavc/.bash_profile
vaichidrewar le
4
2 barres obliques //après remotehostest important. Slash simple ne fonctionnera pas
Lee Chee Kiam
2
Si vous avez un nom d'utilisateur différent de celui de votre hôte actuel sur l'hôte distant, vous utiliserezvimdiff /path/to/file scp://username@remotehost//path/to/file
JaredC,
comment pouvez-vous faire cela avec deux hôtes distants avec les fichiers de clés id_rsa @JaredC?
Manatax
61
Si vous voulez juste voir quels fichiers sont différents, plutôt qu’un diff des fichiers réels, vous pouvez utiliser rsync --dry-run
Si mon édition ne passe pas: cette méthode est supérieure à la réponse choisie car elle fonctionne avec les makefiles.
Chris Redford
@Steve Dickinson - qu'entendez-vous par "ça marche à l'intérieur des makefiles"?
Martin Vegter
1
C’est aussi une bonne solution si vous souffrez de l’allergie à Vim comme moi. :) J'ai créé un script bash qui compare le même fichier sur deux hôtes différents, ce qui est utile lors de la migration de services entre ordinateurs et lors de la comparaison de fichiers de configuration. Voir gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek
10
Utilisez scp pour amener les fichiers sur une machine commune et les y afficher?
Ou, si vous voulez simplement savoir si les fichiers sont différents ou non, hachez-les avec md5sum sur chaque machine.
Vous pourriez aussi regarder quelque chose comme SSHFS , mais je ne sais pas comment un algorithme comme diff fonctionne par-dessus.
diff est généralement une action ponctuelle, comme pour vérifier la différence de configuration. Monter un système de fichiers à chaque fois est possible, mais pas pratique. Je ferais mieux de goudron et scp.
Alexey Timanovsky
3
Vous pouvez utiliser rsyncle mode de fonctionnement à sec, comme suggéré brièvement dans une autre réponse . Il répertorie tous les fichiers qui sont différents.
Pour cela, utilisez les rvncoptions ( r= récursif, v= verbeux, n= exécution à sec, c= somme de contrôle). En rsyncmode Pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]), voici un exemple:
J'ai utilisé SFTP sur le serveur distant et entré mon nom d'utilisateur / pwd à l'invite. Ensuite, j'ai utilisé le répertoire créé dans le répertoire .gvfs de mon répertoire personnel dans la commande diff.
diff -r --brief / home / répertoire utilisateur / .gvfs / SFTP \ on \ freenas.local / chemin d'accès au répertoire / répertoire1 / chemin d'accès au répertoire local / répertoire2
Utilisez sshfs monté sur ssh. Ce ne sera pas si rapide, mais vous pouvez utiliser votre suite complète d'outils qui s'attendent à ce que tout se trouve sur un système de fichiers local. Une alternative est NFS sur un tunnel créé avec "ssh -w" (ou d'autres communications où ssh n'est pas la limitation).
rsync -ani --delete / root@remotehost:/
que la réponse complète donne plus de détails.Réponses:
Vous pouvez le faire avec la substitution de processus de Bash :
Ou, si les deux sont sur des serveurs distants:
la source
Enfin, j'ai trouvé une excellente solution: vimdiff
merci à http://linux.spiney.org/remote_diff_with_vim_and_ssh voir aussi http://www.vim.org/scripts/script.php?script_id=1075 .
la source
//
aprèsremotehost
est important. Slash simple ne fonctionnera pasvimdiff /path/to/file scp://username@remotehost//path/to/file
Si vous voulez juste voir quels fichiers sont différents, plutôt qu’un diff des fichiers réels, vous pouvez utiliser
rsync --dry-run
la source
Voici une autre recette rapide et sale en ligne de commande. Contrairement à la réponse choisie, cela fonctionne dans les makefiles:
la source
Utilisez scp pour amener les fichiers sur une machine commune et les y afficher?
Ou, si vous voulez simplement savoir si les fichiers sont différents ou non, hachez-les avec md5sum sur chaque machine.
Vous pourriez aussi regarder quelque chose comme SSHFS , mais je ne sais pas comment un algorithme comme diff fonctionne par-dessus.
la source
rsync --dry-run
.Une façon possible, si cela est possible sur votre système, consiste simplement à monter le système de fichiers distant avec sshfs .
la source
Vous pouvez utiliser
rsync
le mode de fonctionnement à sec, comme suggéré brièvement dans une autre réponse . Il répertorie tous les fichiers qui sont différents.Pour cela, utilisez les
rvnc
options (r
= récursif,v
= verbeux,n
= exécution à sec,c
= somme de contrôle). Enrsync
mode Pull (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), voici un exemple:Rappelez - vous , cela ne fournit aucune information sur le fait que le fichier local ou distant est plus récent. Juste s'ils diffèrent.
la source
Sur votre ordinateur local, faites une copie récursive du répertoire que vous voulez différencier. Par exemple:
utilisez rsync pour répliquer le répertoire distant sur la copie locale:
utilisez diff pour trouver la différence entre le répertoire local et la réplique locale du répertoire distant:
la source
Si vous avez sshfs et avez besoin de répertoires diff:
la source
Voici comment je l'ai fait.
J'ai utilisé SFTP sur le serveur distant et entré mon nom d'utilisateur / pwd à l'invite. Ensuite, j'ai utilisé le répertoire créé dans le répertoire .gvfs de mon répertoire personnel dans la commande diff.
diff -r --brief / home / répertoire utilisateur / .gvfs / SFTP \ on \ freenas.local / chemin d'accès au répertoire / répertoire1 / chemin d'accès au répertoire local / répertoire2
la source
C’est un script qui peut aider à différencier le dossier local et le dossier distant.:
la source
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh [email protected] 'ls / opt / lib /') <(/ usr / bin / ssh [email protected] 'ls / tmp /') | grep -i ">" | sed 's /> // g'
la source
Utilisez sshfs monté sur ssh. Ce ne sera pas si rapide, mais vous pouvez utiliser votre suite complète d'outils qui s'attendent à ce que tout se trouve sur un système de fichiers local. Une alternative est NFS sur un tunnel créé avec "ssh -w" (ou d'autres communications où ssh n'est pas la limitation).
la source
Vous pouvez également essayer de généraliser l’approche en créant une fonction bash, éventuellement dans votre ~ / .bashrc:
puis en l'invoquant avec une construction comme:
En appelant diff avec -s, cela indiquera également si les fichiers sont identiques.
À votre santé! Jim
la source