Menu
Jest wolny
Zameldować się
główny  /  Programy / Porównanie plików w systemie Linux do programisty internetowych. Porównanie plików tekstowych w Porównaniu Linux Pliki HEX w Linux

Porównanie plików w systemie Linux do programisty internetowych. Porównanie plików tekstowych w Porównaniu Linux Pliki HEX w Linux

Czasami istnieje potrzeba porównywania kilku plików między sobą. Może to być potrzebne podczas analizy różnicy między kilkoma wersjami pliku konfiguracyjnego lub po prostu porównać różne pliki. W Linuksie istnieje kilka narzędzi do tego, zarówno do pracy przez terminal, jak iw interfejsie graficznym.

W tym artykule zajrzymy się, w jaki sposób pliki Linux są porównywane. Będziemy przeanalizować najbardziej przydatne sposoby zarówno terminalu, jak iw trybie graficznym. Najpierw rozważ, jak porównać plik Linux za pomocą narzędzia Diff.

  • Porównanie plików diff

    Diff Linux Utility to program, który działa w trybie konsoli. Jego składnia jest bardzo prosta. Zadzwoń do narzędzia, przejść aktaA także określ opcje, jeśli to konieczne:

    $ diff file file1 file2

    W razie potrzeby możesz przekazać więcej niż dwa pliki. Przed przejściem do przykładów spójrzmy na narzędzia Opcje:

    • -Q. - Wyświetla tylko różnice między plikami;
    • -s. - Wyjście tylko części zbieżnego;
    • -z - Wyjście żądaną liczbę linii po zbieżności;
    • -U. - Wyjście tylko wymaganą liczbę linii po różnicach;
    • -Z - Wyświetlacz w dwóch kolumnach;
    • -MI. - Wyjście w formacie skryptu ED;
    • -N. - Wyjście w formacie RCS;
    • -za. - Porównaj pliki jako tekst, nawet jeśli nie są tekstem;
    • -t. - Wymień karty na luki na wyjściu;
    • -L. - Podziel na stronach i dodaj wsparcie zeskrobujące;
    • -r. - rekurencyjne porównanie folderów;
    • -JA. - Ignoruj \u200b\u200brejestr;
    • -MI. - Ignoruj \u200b\u200bzmiany w zakładkach;
    • -Z. - nie brać pod uwagę przestrzeni na końcu linii;
    • -b. - nie brać pod uwagę przestrzeni;
    • -B. - Nie bierz pod uwagę puste linie.

    Były to główne opcje narzędziowe Opcje, teraz spójrzmy, jak porównać pliki Linux. W wyjściu użyteczności publicznej, bezpośrednio, wyświetlając zmiany, wyświetla ciąg, w którym jest wskazany, w którym linii i co zostało zrobione. Wykorzystuje takie znaki:

    • zA. - dodany;
    • rE. - usunięty;
    • dO. - Zmieniono.

    Ponadto, linie, które różnią się oznaczane przez symbol<, а те, которые совпадают - символом >.

    Oto zawartość naszych plików testowych:

    Teraz dokonajmy porównywania plików diff:
    $ diff file1 file2

    W rezultacie otrzymujemy linię: 2.3C2.4. Oznacza to, że rzędy 2 i 3 zostały zmienione. Możesz użyć opcji, aby zignorować rejestr:
    $ Diff -i file1 file2

    Możesz zakończyć się w dwóch kolumnach:
    $ Diff -y file1 file2

    I korzystając z opcji -u, możesz utworzyć łatkę, która może być nałożona na ten sam plik przez innego użytkownika:
    $ Diff -u file1 file2

    Aby obsługiwać wiele plików w folderze wygodnym, aby użyć opcji -R:
    $ Diff -r ~ / tmp1 ~ / tmp2

    Dla wygody możesz natychmiast przekierować wyjście narzędzia do pliku:
    $ Diff -u file1 file2\u003e file.patch

    Jak widać, wszystko jest bardzo proste. Ale nie bardzo wygodne. Bardziej przyjemny używać narzędzi graficznych.

    Porównanie plików Linux z GUI

    Istnieje kilka doskonałych narzędzi do porównania plików w systemie Linux w interfejsie graficznym. Możesz łatwo dowiedzieć się, jak ich użyć. Spójrzmy na kilka z nich:

    1. Kompare.

    Kompare to narzędzie graficzne do pracy z różnicą, co pozwala znaleźć różnice w plikach, a także łączyć je. Jest napisany na QT i jest przeznaczony przede wszystkim na KDE. Oto jego główne cechy:

  • Obsługa wielu formatów różnicowych;
  • Wspieraj porównanie plików i katalogów Linuksa;
  • Obsługa przeglądania plików diff;
  • Konfigurowalny interfejs;
  • Utwórz i zastosuj poprawki do plików.

2. DiffMerge.

Diffenerge jest programy krzyżowe do porównywania i łączenia plików. Umożliwia porównanie dwóch lub trzech plików. Obsługuje rzędy edycji w locie.

Funkcje:

  • Wsparcie porównawcze katalogowe;
  • Integracja z przeglądarką plików;
  • Konfigurowalny.

3. Meld.

Jest to lekkie narzędzie do porównywania i łączenia plików. Umożliwia porównanie plików, katalogów, a także wykonywać systemy sterowania wersji. Program jest tworzony dla programistów i ma funkcje:

  • Porównanie dwóch i trzech plików;
  • Za pomocą typów niestandardowych i słów;
  • Automatyczny tryb połączenia i działanie z bokami tekstowymi;
  • Wspieraj Git, Mercurial, Subversion, Bazar i wiele więcej.

4. Diffuse.

Dysfuj to kolejne popularne i dość proste narzędzie do porównywania i łączenia plików. Jest napisany w Pythonie. Obsługiwane są dwie główne funkcje - porównanie plików i zarządzania wersją. Możesz edytować pliki bezpośrednio podczas przeglądania. Główne funkcje:

  • Podświetlona składnia;
  • Klawisze skrótów do wygodnej nawigacji;
  • Wsparcie dla nieograniczonej anulowania;
  • Wspierać Unicode;
  • Wspieraj Git, CVS, Darcs, Mercurial, RC, Subversion, SVK i Monotone.

5. XXDIFF.

XXDIFF to bezpłatne i bardzo potężne narzędzie do porównywania i łączenia plików. Ale program ma kilka minusów. Jest to brak plików wsparcia i edycji Unicode.

Funkcje:

  • Porównanie powierzchni lub rekurencyjne jednego lub dwóch plików i katalogów;
  • Oświetlenie różnic;
  • Interaktywne stowarzyszenie;
  • Obsługa zewnętrznych narzędzi porównawczych, takich jak GNU Diff, SIG Diff, Cleareddiff i wiele więcej;
  • Rozszerzalność ze skryptami;
  • Konfigurowalność.

6. KDIFF3.

Kdiff3 to kolejne doskonałe, bezpłatne narzędzie do porównywania plików otoczonych przez pulpit KDE. Jest zawarty w programie KDevelop i działa na wszystkich platformach, w tym Windows i MacO. Możesz porównać dwa pliki Linux dla dwóch lub trzech, a nawet porównać katalogi. Oto główne cechy:

  • Wyświetlanie linii różnic i przeważają;
  • Obsługa automatycznego pokazu;
  • Przetwarzanie konfliktów podczas fuzji;
  • Wspierać Unicode;
  • Wyświetlanie różnic;
  • Wsparcie wyrównania dłoni.

), ich porównania, a także porównania klientów GUI dla nich. Były też dyskusje z wtyczek do IDE do pracy z Git i Mercurial. Ale praktycznie nie było informacji Na narzędziach wizualnych porównania i zgody konfliktów konfliktów.

Niedawno "przestawiłem się" z Mercurial (co wciąż uważają go za wygodniejsze i logiczne) na Git, ponieważ zdecydowana większość projektów, które jestem zainteresowany, używaj Git i hostowanego na Github. W tym względzie pojawiło się pytanie o zmianę narzędzi Arsenal, w szczególności kwestii wybór narzędzi Porównanie wizualne i połączenie (diff i scal). Aby wypełnić brak informacji o Habré, postanowiłem napisać ten mini-recenzji. Jak mówią - na gorącym obuwie.

Pod kota znajdziesz również przykłady ustawień GIT do użytku z Diffenerge i WinMerge pod Windows. Myślę, że wielu zaoszczędzi czas.

Nazwa funkcje Platforma

Kdiff3.

Git i winmerge.

1) Dodaj do katalogu c: / GIT / Libexec / Git-Core / MerGetools /
Plik WinMerge w następujący sposób:

Diff_cmd () ("C: / Program Pliki (X86) /winMerge/winmergeu.exe" $ "$ Local" "$ Remote"\u003e / Dev / Null 2\u003e & 1) Merge_CMD () ("C: / Program Pliki () x86) /winMerge/winmergeu.exe "$ pwd / $ lokalny" "$ PWD / $ Remote" "$ PWD / $ scalony"\u003e / dev / null 2\u003e & 1 Status \u003d $?)
Gdy Git nie może automatycznie połączyć zmian, konflikt scalania i konfliktowy plik są dodawane do konfliktu (dodawane są markery fuzyjne (<<<<<<<, =======, и >\u003e\u003e\u003e\u003e\u003e\u003e). Są one potrzebne do rozwiązania konfliktu za pomocą narzędzi innych firm.
Rozważ plik readme.txt. który jest utworzony w wyniku łączenia oddziałów mistrz i nowy. W powyższym przykładzie:

<<<<<<< HEAD master str ======= new str >\u003e\u003e\u003e\u003e\u003e\u003e Nowy
Możemy otworzyć plik konfliktu za pomocą programu WinMerge, aby rozwiązać konflikt.

Potem otworzy się dwukierunkowa scalanie środków:

Na podstawie opisanej logiki przepisują zespół fuzji merge_cmd. w następujący sposób:
Merge_CMD () ("C: / Program Pliki (X86) /winMerge/winmergeu.exe" $ Scalone "\u003e / Dev / Null 2\u003e & 1 Status \u003d $?)
W istocie oba powyższe opcje są równoważne.

2) Edytuj .gitconfig.
Narzędzie \u003d Winmerge CMD \u003d "Winmerge" Tool \u003d Winmerge Cmd \u003d "Winmerge" TrustexitCode \u003d False Keepbackup \u003d False
Ostatnia linia anuluje zapisując pliki kopii zapasowych w katalogu repozytorium.

3) Utwórz konflikt podczas łączenia dwóch gałęzi (patrz przykład za pomocą DifMerge).
Git DiffTool Master New // Porównaj dwie gałęzie

Aby rozwiązać konflikt podczas łączenia oddziałów, używamy zespołu
Git mergetool.

Aby porównać dwa lub więcej plików w systemie Linux, istnieje polecenie DIFF. Może się równać oddzielne plikii katalogi. Rozważaj składnię, opcje polecenia DIFF i przykłady wielu użycia.

Składnia Diff Team.

Polecenie DIFF ma następującą składnię:

Diff [opcje] pliki lub katalog

Określamy opcje i przesyłamy dwa lub więcej plików lub katalogów, które musimy porównać.

Opcje Diff Team.

Rozważ główne opcje polecenia DIFF. Rozważę tylko te opcje, które sam najczęściej używam.

-MI.ignoruj \u200b\u200bzmiany związane z dodaniem symbolu karty w tekście.
-b.ignoruj \u200b\u200bzmiany związane z dodatkiem przestrzeni.
-w.ignoruj \u200b\u200bzmiany związane z dodatkiem przestrzeni i zakładek.
-B.ignoruj \u200b\u200bnowe puste struny.
-P (lub -show-c-funkcja)pokaż nazwę funkcji funkcji C, która znalazła zmiany.
-y (lub -bove-by-side)wyświetl wyniki w dwóch kolumnach.
-r.wyświetl rekurencyjnie katalogi.
-X file.wyklucz z wyszukiwania plików, których nazwiska pasują do szablonów w pliku pliku.
-d (lub minimal)spróbuj znaleźć jak najmniejsze zmiany (to jest, wyeliminuj fałszywe odpowiedzi).

Przykłady stosowania Diff Team

Porównanie dwóch plików tekstowych

Aby uzyskać proste porównanie dwóch plików tekstowych za pomocą nazw MyFile1 i MyFile2, uruchomisz polecenie w terminalu:

Diff myfile1 myfile2.

Wyjście polecenia DIFF jest wygodne, aby przekierować do pliku z rozszerzeniem różnic. Większość redakcja tekstowa W Linuksie, na przykład Gedit, rozpoznaj ten plik i podświetli swoją składnię. Aby wysłać wynik porównania do pliku zmian.diff, musisz użyć symbolu przekierowania przepływu (\u003e):

Diff myFile1 myfile2\u003e zmiany.diff

Porównanie katalogu zawierającego pliki tekstowe

Rozważmy przykład porównywania dwóch katalogów (mydir1 i mydir2), które zawierają pliki tekstowe.. Główną różnicą tutaj z powyższego przykładu jest to, że dodajemy opcję -R, co oznacza obejście rekurencyjne pliki w katalogach.

Diff -r mydir1 mydir2\u003e zmiany.diff

Przypuśćmy teraz, że w katalogach, w których porównujemy pliki są dużo "śmieci", których nie powinniśmy porównać. Utwórz plik ExcludFiles i zapisuj szablony i nazwy plików, których nie powinniśmy porównać. Na przykład zawartość wykluczenia może być:

* .o Changelog * * .bak * .exe

Teraz określisz polecenie DIFT, aby użył naszego pliku excludfiles przy porównywaniu katalogów:

DIF -R -X Excludfiles mydir1 mydir2\u003e zmiany.diff

W ten sposób porównujemy pliki, których nazwy nie spadają pod szablonami w pliku ExcludFiles, na przykład Vasya.exe lub Changelog12.

Dodaj kilka opcji opisanych powyżej, aby poprawić wynik porównania:

DIF -RWBD -X Excludfiles mydir1 mydir2\u003e zmiany.diff

Porównujemy pliki w katalogach Mydir1 i MyDir2, ignorując zmiany związane z dodaniem pustych strun, spacji, zakładek i używać szablonów nazwy plików w wykluczeniu, aby wykluczyć z porównania niepotrzebne pliki.

Wniosek

Aby uzyskać więcej informacji na temat korzystania z polecenia Diff w swoim system Linux. Możesz uzyskać, uruchamiając polecenie:

Człowiek różnica.

Istnieją również programy, które umożliwiają porównanie plików za pomocą interfejs graficzny. Na przykład program meld, który pokazuje, gdzie i co zmieniło się w plikach.



Porównanie dwóch plików w terminalu Linux (6)

Oto moje rozwiązanie dla tego:

MKDIR TEMP MKDIR Wyniki CP / Usr / Share / American-English-English ~ / Temp / American-angielski-słownik CP / Usr / Share / Dict / British-English ~ / Temp / Brytyjsko-Polski Słownik Cat ~ / Temp / American -Nglish-słownik | WC -L\u003e ~ ~ ~ ~ / wyniki / Count-American-English-Dictionary Cat ~ / Temp / Brytyjsko-słownik | WC -L\u003e ~ ~ ~ / wyniki / Count-British-English-Dictionary Grep -FXF ~ / Temp / Temp / American-Słownik ~ / Temp / British-Dictionary - Słownik\u003e ~ / wyniki / Common-English Grep -FXVF ~ / wyniki / Common-English ~ / Temp / American-Słownik\u003e ~ / Wyniki / unikalny-amerykański-angielski GREP -FXVF ~ / Wyniki / Common-English ~ / Temp / Brytyjsko-Polski słownik\u003e ~ / wyniki / Unique-British \\ t -Język angielski

Nazwano dwa pliki "A.txt" i "B.txt", która jest lista słów. Teraz chcę sprawdzić, do których dodawane są słowa "A.txt" i nie są w "B.txt" .

Potrzebuję skutecznego algorytmu, ponieważ muszę porównywać dwa słownictwo.

Możesz użyć narzędzia Diff w Linux, aby porównać dwa pliki. Aby filtrować wymagane dane, możesz użyć opcje - Formatowanie grupy i - Format grupowy .

Poniższe trzy opcje można użyć do wyboru odpowiedniej grupy dla każdej opcji:

    "% <" получить строки из FILE1

    "%\u003e" Dostaje wiersze z pliku2

    "" (Pusty ciąg), aby usunąć wiersze z obu plików.

Na przykład: diff -Changed-Group-Format \u003d "%<" --unchanged-group-format = "" file1.txt file2.txt

[TMP] # CAT File1.txt Test Jeden Test Dwa Test Trzy Test Cztery Test Osiem [TSP] # CAT file2.txt Test Jeden test Trzy Test Nine [TMP] # Diff --changed-Group-Format \u003d "%<" --unchanged-group-format="" file1.txt file2.txt test two test four test eight

Jeśli wolisz styl wyjściowy DIFF z GIT Diff, możesz użyć go z flagą --no-indeksu, aby porównać pliki nie w repozytorium GIT:

Git diff --no-index a.txt b.txt

Korzystanie z plików plików z liniami nazw plików 200 tysięcy każdego, porównałem (z wbudowanym poleceniem czasowym) to podejście i inne odpowiedzi:

Git diff --no-index a.txt b.txt # ~ 1.2s comm -23<(sort a.txt) <(sort b.txt) # ~0.2s diff a.txt b.txt # ~2.6s sdiff a.txt b.txt # ~2.7s vimdiff a.txt b.txt # ~3.2s

comm wydaje się dzisiaj najszybciej, podczas gdy Git Diff --no-indeks wydaje się być najszybszym podejściem do stylu różnic.

Aktualizacja 2018-03-25 rzeczywistych Możesz pominąć flagę --no-indeks, jeśli nie jesteś w repozytorium GIT i chcesz porównać pliki nieopodrywalne w tym repozytorium. Z stronami człowieka:

Ten formularz ma na celu porównanie danych o dwóch ścieżkach w systemie plików. Możesz pominąć parametr -No index, gdy rozpoczniesz polecenie w drzewie roboczej, kontrolowanej przez git, a co najmniej jedną ze ścieżki poza warstwą lub gdy polecenie jest uruchamiane poza drzewem roboczym, zarządzany przez Git.

Użyj Comm -13. (Wymagane są posortowane pliki) :

$ CAT File1 jeden dwa trzy $ Cat file2 jeden dwa trzy cztery $ Comm -13<(sort file1) <(sort file2) four

Sortuj je i użyj Comm:

Comm -23.<(sort a.txt) <(sort b.txt)

comm porównuje (sortuje) pliki wejściowe i domyślnie wyświetla trzy kolumny: linie, które są unikalne dla, linie, które są unikalne dla B, oraz linie, które są obecne w obu. Przy określaniu -1, -2 i / lub -3 można stłumić odpowiednie wyjście. Dlatego wymienia Comm -23 AB tylko rekordy, które są unikalne dla. Używam składni<(...) для сортировки файлов на лету, если они уже отсортированы, вам это не нужно.

jeśli masz zainstalowany VIM, spróbuj:

Vimdiff File1 File2.

Vim -d file1 file2

znajdziesz to fantastycznie.

), ich porównania, a także porównania klientów GUI dla nich. Były też dyskusje z wtyczek do IDE do pracy z Git i Mercurial. Ale praktycznie nie było informacji Na narzędziach wizualnych porównania i zgody konfliktów konfliktów.

Niedawno "przestawiłem się" z Mercurial (co wciąż uważają go za wygodniejsze i logiczne) na Git, ponieważ zdecydowana większość projektów, które jestem zainteresowany, używaj Git i hostowanego na Github. W tym względzie pojawiło się pytanie o zmianę narzędzi Arsenal, w szczególności kwestii wybór narzędzi Porównanie wizualne i połączenie (diff i scal). Aby wypełnić brak informacji o Habré, postanowiłem napisać ten mini-recenzji. Jak mówią - na gorącym obuwie.

Pod kota znajdziesz również przykłady ustawień GIT do użytku z Diffenerge i WinMerge pod Windows. Myślę, że wielu zaoszczędzi czas.

Nazwa funkcje Platforma

Kdiff3.

Git i winmerge.

1) Dodaj do katalogu c: / GIT / Libexec / Git-Core / MerGetools /
Plik WinMerge w następujący sposób:

Diff_cmd () ("C: / Program Pliki (X86) /winMerge/winmergeu.exe" $ "$ Local" "$ Remote"\u003e / Dev / Null 2\u003e & 1) Merge_CMD () ("C: / Program Pliki () x86) /winMerge/winmergeu.exe "$ pwd / $ lokalny" "$ PWD / $ Remote" "$ PWD / $ scalony"\u003e / dev / null 2\u003e & 1 Status \u003d $?)
Gdy Git nie może automatycznie połączyć zmian, konflikt scalania i konfliktowy plik są dodawane do konfliktu (dodawane są markery fuzyjne (<<<<<<<, =======, и >\u003e\u003e\u003e\u003e\u003e\u003e). Są one potrzebne do rozwiązania konfliktu za pomocą narzędzi innych firm.
Rozważ plik readme.txt. który jest utworzony w wyniku łączenia oddziałów mistrz i nowy. W powyższym przykładzie:

<<<<<<< HEAD master str ======= new str >\u003e\u003e\u003e\u003e\u003e\u003e Nowy
Możemy otworzyć plik konfliktu za pomocą programu WinMerge, aby rozwiązać konflikt.

Potem otworzy się dwukierunkowa scalanie środków:

Na podstawie opisanej logiki przepisują zespół fuzji merge_cmd. w następujący sposób:
Merge_CMD () ("C: / Program Pliki (X86) /winMerge/winmergeu.exe" $ Scalone "\u003e / Dev / Null 2\u003e & 1 Status \u003d $?)
W istocie oba powyższe opcje są równoważne.

2) Edytuj .gitconfig.
Narzędzie \u003d Winmerge CMD \u003d "Winmerge" Tool \u003d Winmerge Cmd \u003d "Winmerge" TrustexitCode \u003d False Keepbackup \u003d False
Ostatnia linia anuluje zapisując pliki kopii zapasowych w katalogu repozytorium.

3) Utwórz konflikt podczas łączenia dwóch gałęzi (patrz przykład za pomocą DifMerge).
Git DiffTool Master New // Porównaj dwie gałęzie

Aby rozwiązać konflikt podczas łączenia oddziałów, używamy zespołu
Git mergetool.