Porady Admina: diff
Ostatnia aktualizacja: 16 września 2023, 12:46
W dzisiejszym wpisie z cyklu Porady Admina zajmiemy się programem GNU diff.
GNU diff (od: difference – różnica) służy do wyświetlania różnic w plikach poprzez porównanie plików wiersz po wierszu. Program 'diff’ informuje nas, które wiersze w jednym pliku należy zmienić, aby oba pliki były identyczne. Program informuje nas, które wiersze w jednym pliku należy zmienić, aby oba pliki były identyczne. Ważną rzeczą do zapamiętania jest to, że diff używa pewnych specjalnych symboli i instrukcji, które są wymagane do uczynienia dwóch identycznych plików. Zawiera instrukcje, jak zmienić pierwszy plik, aby pasował do drugiego pliku.
Program 'diff’ jest częścią pakietu 'diffutils’ i jest dostępny w większości dystrybucji Linux.
Składnia
diff [OPCJE]... PLIKI
Opcje
–normal wypisuje zwykły diff (domyślnie)
-q, –brief informuje jedynie, że pliki się różnią
-s, –report-identical-files gdy pliki są identyczne, wypisuje informację o tym
-c, -C LICZBA, –context[=LICZBA] wypisuje LICZBĘ (domyślnie 3) wierszy kopiowanego kontekstu
-u, -U LICZBA, –unified[=LICZBA] wypisuje LICZBĘ (domyślnie 3) wierszy zunifikowanego kontekstu
-e, –ed wypisuje zapis eda
-n, –rcs wpisuje różnicę w formacie diffa RCS
-y, –side-by-side wypisuje wynik w dwóch kolumnach
-W, –width=LICZBA wypisuje co najwyżej LICZBĘ (domyślnie 130) kolumn
–left-column wypisuje jedynie lewą kolumnę wspólnych wierszy
–suppress-common-lines nie wypisuje wspólnych wierszy
-p, –show-c-function pokazuje funkcję C, w której znajduje się każda ze zmian
-F, –show-function-line=WYR-REG pokazuje ostatni wiersz pasujący do WYR-REG
–label ETYKIETA użycie ETYKIETY zamiast nazwy pliku i znacznika czasu (może być powtarzane)
-t, –expand-tabs zamienia tabulację na spacje w wypisywanym wyniku
-T, –initial-tab tworzy formatowanie, dodając na początku znak tabulacji
–tabsize=LICZBA tabulacja ma rozmiar LICZBA (domyślnie 8) kolumn
–suppress-blank-empty nie wypisuje spacji lub tabulatora przed pustymi wierszami
-l, –paginate przetwarza wyjście przez pr, numerując strony
-r, –recursive porównuje znalezione podkatalogi rekurencyjnie
–no-dereference bez podążania za dowiązaniami symbolicznymi
-N, –new-file traktuje brakujące pliki jako puste
–unidirectional-new-file traktuje brakujące pliki początkowe jako puste
–ignore-file-name-case ignoruje wielkość znaków podczas porównywania nazw plików
–no-ignore-file-name-case nie ignoruje wielkości znaków podczas porównywania nazw plików
-x, –exclude=WZORZEC pomija pliki pasujące do WZORCA
-X, –exclude-from=PLIK pomija pliki pasujące do wzorca w PLIKU
-S, –starting-file=PLIK rozpoczyna od PLIKU podczas porównywania katalogów
–from-file=PLIK1 porównuje PLIK1 do wszystkich elementów zbioru (operandów); PLIK1 może być katalogiem
–to-file=PLIK2 porównuje wszystkie elementy zbioru (operandy) do PLIKU2; PLIK2 może być katalogiem
-i, –ignore-case ignoruje wielkość znaków w zawartości pliku
-E, –ignore-tab-expansion
-Z, –ignore-trailing-space ignoruje białe znaki na końcu wiersza
-b, –ignore-space-change ignoruje zmiany w liczbie białych znaków
-w, –ignore-all-space ignoruje wszystkie białe znaki
-B, –ignore-blank-lines zignorowanie zmian liczby pustych linii
-I, –ignore-matching-lines=WYR-REG zignorowanie zmian w liniach pasujących do WYR-REG
-a, –text traktuje wszystkie pliki jako tekstowe
–strip-trailing-cr wycina końcowy znak powrotu karetki (CR) w wyjściu
-D, –ifdef=NAZWA wypisuje połączone pliki z różnicami „#ifdef NAZWA”
Przykłady
Porównanie dwóch plików
diff plik1 plik2
Tryb kontekstowy
Opcja -c (context) wyświetla różnice w trybie kontekstowym
diff -c plik1 plik2
Tryb zunifikowany
Opcja -u (unified) wyświetla różnice w trybie zunifikowanym. Jest podobny do trybu kontekstowego, ale nie wyświetla żadnych zbędnych informacji lub pokazuje informacje w zwięzłej formie.
diff -u plik1 plik2
Pomijaj wielkie litery
Domyślnie w tym poleceniu rozróżniana jest wielkość liter. Aby to polecenie nie uwzględniało wielkości liter, użyj opcji -i
diff -i plik1 plik2
Więcej informacji o programie diff uzyskasz poleceniami:
diff --help
man diff