¿Cómo se refiere a los directorios? Siempre podría reemplazar cat con ls
Kyle Brandt
27
Sospecho que 'para directorios' significa hacer un recursivo diff
Ian Clelland
99
Descubrí que esta técnica no funcionaba para mí si mi host remoto requería una contraseña. La solicitud de contraseña no parecía funcionar bien con la redirección y no se pudo completar con éxito. Si usa las teclas ssh, esto no debería ser un problema.
Adam Franco
2
Esta es una gran solución general para muchos problemas. En lugar de 'cat foo' podría usar 'find / foo / bar -type f | mientras lee el archivo; hacer eco "**** $ archivo"; gato "$ archivo"; hecho 'y tendrías una lista de los nombres de archivo y el contenido del archivo para diferenciar.
Si mi edición no se realiza: este método es superior a la respuesta elegida porque funciona con archivos MAKE.
Chris Redford
@Steve Dickinson: ¿qué quieres decir con "funciona dentro de los makefiles"?
Martin Vegter
1
Esta también es una buena solución si sufres de alergia vim como yo. :) Creé un script bash que compara el mismo archivo en dos hosts diferentes, útil al migrar servicios entre máquinas y comparar archivos de configuración. Ver gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek el
10
¿Usar scp para llevar los archivos a una máquina común y diferenciarlos allí?
O, si solo quiere saber si los archivos son diferentes o no, hágalos con md5sum en cada máquina.
También podría buscar algo como SSHFS , pero no sé qué tan bien funciona un algoritmo como diff sobre eso.
diff es generalmente una acción de una sola vez, como verificar la diferencia de configuración. El sistema de archivos de montaje cada vez es posible, pero no es conveniente. Será mejor que alquitrán y scp.
Alexey Timanovsky
3
Puede usar rsyncen modo de ejecución en seco, como se sugiere brevemente en otra respuesta . Enumera todos los archivos que son diferentes.
Para eso, use las rvncopciones ( r= recursivo, v= detallado, n= ejecución en seco, c= suma de verificación). Con rsyncen modo pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]), un ejemplo es:
Utilicé SFTP en el servidor remoto e ingresé mi nombre de usuario / pwd cuando se me solicitó. Luego usé el directorio que se creó en el directorio .gvfs en mi directorio de inicio en el comando diff.
diff -r - resumen / inicio / usuario dir / .gvfs / SFTP \ on \ freenas.local / ruta al directorio / dir1 / ruta al directorio local / directorio2
Utilice sshfs montados en ssh. No será tan rápido, pero puede usar su conjunto completo de herramientas que esperan que todo esté en un sistema de archivos local. Una alternativa es NFS sobre un túnel hecho con "ssh -w" (u otras comunicaciones donde ssh no es la limitación).
rsync -ani --delete / root@remotehost:/
pero la respuesta completa da más detalles.Respuestas:
Puedes hacerlo con la sustitución del proceso de Bash :
O, si ambos están en servidores remotos:
fuente
Finalmente encontré una gran solución: vimdiff
gracias a http://linux.spiney.org/remote_diff_with_vim_and_ssh ver también http://www.vim.org/scripts/script.php?script_id=1075 .
fuente
//
después de laremotehost
es importante. La barra simple no funcionarávimdiff /path/to/file scp://username@remotehost//path/to/file
Si solo desea ver qué archivos son diferentes, en lugar de una diferencia de los archivos reales, puede usar
rsync --dry-run
fuente
Aquí hay otra receta de línea de comando rápida y sucia. A diferencia de la respuesta elegida, funciona dentro de makefiles:
fuente
¿Usar scp para llevar los archivos a una máquina común y diferenciarlos allí?
O, si solo quiere saber si los archivos son diferentes o no, hágalos con md5sum en cada máquina.
También podría buscar algo como SSHFS , pero no sé qué tan bien funciona un algoritmo como diff sobre eso.
fuente
rsync --dry-run
.Una forma, si es posible en su sistema, sería simplemente montar el sistema de archivos remoto con sshfs .
fuente
Puede usar
rsync
en modo de ejecución en seco, como se sugiere brevemente en otra respuesta . Enumera todos los archivos que son diferentes.Para eso, use las
rvnc
opciones (r
= recursivo,v
= detallado,n
= ejecución en seco,c
= suma de verificación). Conrsync
en modo pull (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
), un ejemplo es:Recuerde , esto no proporciona información sobre si el archivo local o remoto es más nuevo. Solo si difieren.
fuente
en su máquina local, haga una copia recursiva del directorio que desea diferenciar. Por ejemplo:
use rsync para replicar el directorio remoto sobre la copia local:
use diff para encontrar la diferencia entre el directorio local y la réplica local del remoto:
fuente
Si tiene sshfs y necesita diferenciar directorios:
fuente
Así es como lo hice.
Utilicé SFTP en el servidor remoto e ingresé mi nombre de usuario / pwd cuando se me solicitó. Luego usé el directorio que se creó en el directorio .gvfs en mi directorio de inicio en el comando diff.
diff -r - resumen / inicio / usuario dir / .gvfs / SFTP \ on \ freenas.local / ruta al directorio / dir1 / ruta al directorio local / directorio2
fuente
Este es un script que puede ayudar a diferenciar la carpeta local y la carpeta remota .:
fuente
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'
fuente
Utilice sshfs montados en ssh. No será tan rápido, pero puede usar su conjunto completo de herramientas que esperan que todo esté en un sistema de archivos local. Una alternativa es NFS sobre un túnel hecho con "ssh -w" (u otras comunicaciones donde ssh no es la limitación).
fuente
También puede intentar generalizar el enfoque creando una función bash, posiblemente en su ~ / .bashrc:
luego invocándolo con una construcción como:
Al invocar diff con -s, esto también informará si los archivos son idénticos.
¡Salud! Jim
fuente