Mam dwa katalogi z tą samą listą plików. Muszę porównać wszystkie pliki znajdujące się w obu katalogach za pomocą diff
polecenia. Czy jest to prosta opcja wiersza poleceń, czy muszę napisać skrypt powłoki, aby uzyskać listę plików, a następnie iterować przez nie?
303
diff
polecenia, pobierając narzędzia GNU dla Win32 .-b
ignoruje zmiany białych znaków i-u
daje 3 linie bufora.diff -rub folder1/ folder2/
-bur
że łatwo byłoby zapamiętać, gdybyś mieszkał w zimnym klimacie.Jeśli chcesz zobaczyć tylko różne pliki, możesz użyć:
Opcja „q” pokaże tylko pliki, które się różnią, ale nie różnią się treścią, a „sort” uporządkuje dane wyjściowe alfabetycznie.
źródło
diff
na temat każdej pary różnych plików. Podejście byłoby zupełnie inne, gdyby tylko jeden lub dwa pliki różniły się w porównaniu z dziesiątkami plików. Mogłem zgubić dane wyjściowe z jednoczesnego pobraniadiff
dziesiątek plików!-x PATTERN
w poleceniu wykluczenie niektórych podkatalogów. Na przykładdiff -qr repo1 repo2 -x ".git"
porówna dwa katalogi (repo1 i repo2), ale wykluczy pliki w folderze .git odpowiednich katalogów.Diff ma opcję,
-r
która ma właśnie to zrobić.diff -r dir1 dir2
źródło
diff
może nie tylko porównywać dwa pliki, ale także, korzystając z-r
opcji, chodzić po całych drzewach katalogów, rekurencyjnie sprawdzając różnice między podkatalogami i plikami występującymi w porównywalnych punktach w każdym drzewie.źródło
Jeśli jest to GNU diff, powinieneś być w stanie wskazać go na dwa katalogi i użyć opcji -r.
W przeciwnym razie spróbuj użyć
Uwaga: Jak zauważył Dennis w sekcji komentarzy, tak naprawdę nie trzeba wykonywać podstawiania poleceń na ls. Robię to od tak dawna, że właściwie robię to na autopilocie i zastępuję polecenie, aby uzyskać listę plików do porównania.
Zapomniałem również dodać, że robię „\ ls”, aby tymczasowo wyłączyć mój alias ls do GNU ls, aby stracić informacje o formatowaniu kolorów z listy zwróconej przez GNU ls.
źródło
ls
:for i in ./dir1/*
Oto skrypt pokazujący różnice między plikami w dwóch folderach. Działa rekurencyjnie. Zmień katalog 1 i katalog 2.
źródło
Jeśli nie chcesz porównywać zawartości plików i sprawdzać tylko, które nie są obecne w obu katalogach, możesz porównać listy plików wygenerowane przez inne polecenie.
-printf '%P\n'
mówi,find
aby nie poprzedzać ścieżek wyjściowych katalogiem głównym.Dodałem również,
sort
aby upewnić się, że kolejność plików będzie taka sama w obu wywołaniachfind
.Na
grep
końcu usuwa informacje o identycznych liniach wejściowych.źródło
Spróbuj tego:
źródło