Co masz na myśli dla katalogów, zawsze może zastąpić kota ls
Kyle Brandt
27
Podejrzewam, że „dla katalogów” oznacza robienie rekurencyjnego diff
Ian Clelland
9
Odkryłem, że ta technika nie działa dla mnie, jeśli mój zdalny host wymaga hasła. Monit o hasło nie działał dobrze z przekierowaniem i nie mógł zostać pomyślnie zakończony. Jeśli używasz kluczy ssh, nie powinno to stanowić problemu.
Adam Franco
2
To świetne ogólne rozwiązanie wielu problemów. Zamiast „cat foo” można użyć „find / foo / bar -type f | podczas odczytu pliku; wykonaj echo „**** $ plik”; cat „$ file”; gotowe ”, a będziesz mieć listę nazw plików i zawartości plików do różnic.
Jeśli moja edycja nie przejdzie: ta metoda jest lepsza niż wybrana odpowiedź, ponieważ działa z plikami makefiles.
Chris Redford,
@ Steve Dickinson - co rozumiesz przez „to działa w plikach makefiles”?
Martin Vegter
1
Jest to również dobre rozwiązanie, jeśli cierpisz na alergię vim jak ja. :) Stworzyłem skrypt bash, który porównuje ten sam plik na dwóch różnych hostach, przydatny podczas migracji usług między komputerami i porównywania plików konfiguracyjnych. Zobacz gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek
10
Użyj scp, aby przenieść pliki na wspólną maszynę i tam je udostępnić?
Lub, jeśli chcesz tylko wiedzieć, czy pliki są różne, czy nie, hasz je za pomocą md5sum na każdym komputerze.
Możesz także spojrzeć na coś takiego jak SSHFS , ale nie wiem, jak dobrze algorytm taki jak diff działa w tym zakresie.
diff jest zwykle działaniem jednorazowym, na przykład w celu sprawdzenia różnicy konfiguracji. Montowanie systemu plików za każdym razem jest możliwe, ale niezbyt wygodne. Lepiej tar i scp.
Aleksiej Timanowskij
3
Możesz używać rsyncw trybie pracy na sucho, jak to krótko sugerowano w innej odpowiedzi . Zawiera listę wszystkich plików, które są różne.
W tym celu skorzystaj z rvncopcji ( r= rekurencyjny, v= pełny, n= suchy bieg, c= suma kontrolna). W rsynctrybie pull ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]) przykładem jest:
Użyłem SFTP do zdalnego serwera i po wyświetleniu monitu wprowadziłem nazwę użytkownika / pwd. Następnie użyłem katalogu, który został utworzony w katalogu .gvfs w moim katalogu domowym w poleceniu diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / path to dir / dir1 / path to local dir / dir2
Użyj sshfs zamontowanego w ssh. Nie będzie tak szybko, ale możesz użyć pełnego zestawu narzędzi, które oczekują, że wszystko będzie w lokalnym systemie plików. Alternatywą jest NFS w tunelu wykonanym za pomocą „ssh -w” (lub innej komunikacji, w której ssh nie jest ograniczeniem).
rsync -ani --delete / root@remotehost:/
ale zawiera więcej szczegółów.Odpowiedzi:
Możesz to zrobić z podstawieniem procesu Basha :
Lub, jeśli oba są na zdalnych serwerach:
źródło
Wreszcie znalazłem świetne rozwiązanie: vimdiff
dzięki http://linux.spiney.org/remote_diff_with_vim_and_ssh patrz również http://www.vim.org/scripts/script.php?script_id=1075 .
źródło
//
poremotehost
. Pojedynczy ukośnik nie zadziałavimdiff /path/to/file scp://username@remotehost//path/to/file
Jeśli chcesz zobaczyć, które pliki są różne, a nie różnicę rzeczywistych plików, możesz użyć
rsync --dry-run
źródło
Oto kolejny szybki i brudny przepis w wierszu poleceń. W przeciwieństwie do wybranej odpowiedzi, działa wewnątrz plików makefiles:
źródło
Użyj scp, aby przenieść pliki na wspólną maszynę i tam je udostępnić?
Lub, jeśli chcesz tylko wiedzieć, czy pliki są różne, czy nie, hasz je za pomocą md5sum na każdym komputerze.
Możesz także spojrzeć na coś takiego jak SSHFS , ale nie wiem, jak dobrze algorytm taki jak diff działa w tym zakresie.
źródło
rsync --dry-run
.Jednym ze sposobów, jeśli jest to możliwe w twoim systemie, byłoby po prostu zamontowanie zdalnego systemu plików za pomocą sshfs .
źródło
Możesz używać
rsync
w trybie pracy na sucho, jak to krótko sugerowano w innej odpowiedzi . Zawiera listę wszystkich plików, które są różne.W tym celu skorzystaj z
rvnc
opcji (r
= rekurencyjny,v
= pełny,n
= suchy bieg,c
= suma kontrolna). Wrsync
trybie pull (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
) przykładem jest:Pamiętaj , że nie zawiera to informacji o tym, czy plik lokalny czy zdalny jest nowszy. Tylko jeśli się różnią.
źródło
na komputerze lokalnym zrób rekurencyjną kopię katalogu, który chcesz różnicować. Na przykład:
użyj rsync do zreplikowania katalogu zdalnego na kopii lokalnej:
użyj diff, aby znaleźć różnicę między katalogiem lokalnym a lokalną repliką zdalnego:
źródło
Jeśli masz sshfs i potrzebujesz różnicować katalogi:
źródło
Oto jak to zrobiłem.
Użyłem SFTP do zdalnego serwera i po wyświetleniu monitu wprowadziłem nazwę użytkownika / pwd. Następnie użyłem katalogu, który został utworzony w katalogu .gvfs w moim katalogu domowym w poleceniu diff.
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / path to dir / dir1 / path to local dir / dir2
źródło
To jest skrypt, który może pomóc w różnicowaniu folderów lokalnych i folderów zdalnych:
źródło
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'
źródło
Użyj sshfs zamontowanego w ssh. Nie będzie tak szybko, ale możesz użyć pełnego zestawu narzędzi, które oczekują, że wszystko będzie w lokalnym systemie plików. Alternatywą jest NFS w tunelu wykonanym za pomocą „ssh -w” (lub innej komunikacji, w której ssh nie jest ograniczeniem).
źródło
Możesz także spróbować uogólnić to podejście, tworząc funkcję bash, prawdopodobnie w twoim ~ / .bashrc:
następnie wywołując go za pomocą konstrukcji takiej jak:
Wywołanie diff z opcją -s spowoduje również zgłoszenie, czy pliki są identyczne.
Twoje zdrowie! Jim
źródło