DIFF(1)

NAZWA
diff - szukanie różnic pomiędzy dwoma plikami

SKŁADNIA
diff [opcje] plik1 plik2

OPIS
Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna lub niekompletna. Autorytatywnym źródłem jest obecnie dokumentacja Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń:
    pinfo diff
lub
    info diff.
W najprostszym przypadku diff porównuje zawartość dwóch plików, plik1 i plik2. Nazwa pliku - oznacza tekst odczytywany ze standardowego wejścia. W specjalnym przypadku "diff - -" porównuje kopię standardowego wyjścia ze samym sobą.

Jeśli plik1 jest katalogiem a plik2 nie, diff porównuje plik z katalogu plik1, którego nazwa jest taka sama, jak plik2, i odwrotnie. Plik nie będący katalogiem nie może być -.

Jeśli zarówno plik1 jak i plik2 są katalogami, diff porównuje odpowiednie pliki w obu katalogach, w kolejności alfabetycznej. To porównanie nie jest rekurencyjne, chyba że podano opcję -r lub --recursive. diff nigdy nie porównuje zawartości katalogu tak, jakby był on plikiem. Podany plik nie może być standardowym wejściem, ponieważ standardowe wejście nie ma nazwy i nie dotyczy go zapis `plik o tej samej nazwie'.

Opcje diff na ogół zaczynają się od -, więc zwykle nazwy plików plik1 oraz plik2 nie mogą zaczynać się od -, jednak argument -- traktuje pozostałe argumenty jako nazwy plików, nawet jeśli zaczynają się one od -.

OPCJE
Poniżej znajduje się podsumowanie wszystkich opcji akceptowanych przez GNU diff. Większość opcji posiada dwie równoważne formy, jedną z nich jest pojedyncza litera poprzedzona kreską -, a drugą pełna nazwa poprzedzona przez --. Wiele pojedynczych liter opcji (nie wymagających argumentu) może być łączonych w pojedynczym słowie: `-ac' jest równoważne z `-a -c'. Opcje w formie pełnej nazwy mogą być skracane do dowolnego unikalnego przedrostka. Klamry ([ i ]) oznaczają, że opcja pobiera opcjonalny argument.

-i

--ignore-case
    Ignorowanie zmian w wielkości liter, duże i małe litery są uznawane za równoważne.

-w

--ignore-all-space
    Ignorowanie wszystkich odstępów przy porównywaniu plików.

-b

--ignore-space-change
    Ignorowanie zmian w ilości odstępów.

-B

--ignore-blank-lines
    Ignorowanie zmian, które jedynie dodają lub usuwają puste linie.

-I regexp

--ignore-matching-lines=regexp
    Ignorowanie zmian, które jedynie dodają lub usuwają linie pasujące do wyrażenia regularnego regexp.

--binary
    diff normalnie czyta i zapisuje wszystkie dane jako tekst. Ta opcja wymusza odczyt i zapis danych w trybie binarnym. Nie ma efektu na systemach zgodnych z POSIX, jak GNU czy tradycyjne Uniksy. Jednak wiele systemów operacyjnych komputerów osobistych oznacza koniec linii dwuznakową sekwencją: znakiem powrotu karetki plus znak nowej linii. Na takich systemach diff normalnie ignoruje powroty karetki na wejściu i generuje je na końcu każdej linii wyjściowej, ale z opcją --binary traktuje powrót karetki jak każdy inny znak wejściowy i nie dokłada go na końcu tworzonych linii. Przydatne do operowania na plikach nie-tekstowych, które mają być wymieniane z systemami POSIX-owymi.
    Do porównywania dwu plików bajt po bajcie służy polecenie cmp(1).

-a

--text
    Traktowanie wszystkich plików jako pliki tekstowe i porównywanie ich linia po linii, nawet jeśli nie wyglądają one na pliki tekstowe.

-c

-C linie

--context[=linie]
    Użycie kontekstowego formatu wyjściowego z pokazaniem ilości linii kontekstu podanej w linie (wartość całkowita), lub trzy jeśli nie podano linie. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.

-u

-U linie

--unified[=linie]
    Użycie zunifikowanego formatu wyjściowego i pokazanie ilości linii kontekstu podanej w linie (wartość całkowita), lub trzy jeśli nie podano linie. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.

-linie
    Wyświetlenie ilości linii kontekstu podanej w linie (wartość całkowita). Ta opcja nie ustala wyjściowego formatu, nie ma ona efektu jeśli nie podano opcji -c lub -u. Ta opcja jest przestarzała. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.

-L etykieta

--label=etykieta
    Użycie tekstu etykieta w miejsce nazwy plików w nagłówku formatu kontekstowego i zunifikowanego.

-p

--show-c-function
    Pokazanie, do jakiej funkcji C należy każda ze zmian.

-F regexp

--show-function-line=regexp
    Pokazanie ostatniej poprzedzającej linii, która pasuje do wyrażenia regularnego regexp dla każdego różniącego się fragmentu w formacie kontekstowym i zunifikowanym.

-q

--brief
    Poinformowanie jedynie o tym, czy pliki się różnią, bez podawania szczegółów na temat różnic.

-e

--ed
    Stworzenie wyjścia, które jest poprawnym skryptem ed.

-f

--forward-ed
    Stworzenie wyjścia, które wygląda prawie tak jak skrypt ed, ale zawiera modyfikacje w kolejności pojawiania się zmian w pliku.

-n

--rcs
    Wyprowadzenie różnic w formacie RCS, tak jak -f, z tym wyjątkiem, że każda komenda wyszczególnia numer linii, której dotyczy.

-y

--side-by-side
    Użycie formatu wyjściowego jeden obok drugiego.

-W kolumny

--width=kolumny
    Użycie szerokości wyjścia kolumny w formacie jedna obok drugiej.

--left-column
    Wyświetlenie jedynie lewej kolumny z dwóch wspólnych w formacie jedna obok drugiej.

--suppress-common-lines
    Nie wyświetlanie wspólnych linii w formacie jedna obok drugiej.

-D nazwa

--ifdef=nazwa
    Stworzenie połączonego wyjścia w formacie preprocesora nazwa.

--old-group-format=formatgrupy
    Użycie formatu formatgrupy do wyprowadzenia grupy linii wziętej jedynie z pierwszego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--new-group-format=formatgrupy
    Użycie formatu formatgrupy do wyprowadzenia grupy linii wziętej jedynie z drugiego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--changed-group-format=formatgrupy
    Użycie formatu wyjściowego formatgrupy do wyświetlania grupy linii zawierających różniące się linie z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--unchanged-group-format=formatgrupy
    Użycie formatu formatgrupy do wyprowadzenia wspólnej grupy linii wziętej z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
    Format grupy linii
    W formacie określającym sposób wypisania grupy linii zwykłe znaki oznaczają same siebie; specyfikacje konwersji zaczynają się od znaku procentu % i mają jedną z poniższych postaci:

    %<  linie z plik1, łącznie z końcowym znakiem nowej linii, formatowane zgodnie z formatem starych linii

    %>  linie z plik2, formatowane zgodnie z formatem nowych linii

    %=  linie wspólne dla obu plików, formatowane zgodnie z formatem linii niezmienionych

    %[-][szer][.[dokł]]{doxX}litera
        wartość określona literą, sformatowana w stylu printf. litery mają, w odniesieniu do grup linii w nowym pliku, następujące znaczenie (dla grup w starym pliku używa się małych liter):
           F  numer pierwszej linii
           L  numer ostatniej linii
           N  ilość linii = L-F+1
           E  F-1
           M  L+1

    %%  pojedynczy dosłowny znak procentu %.

    %c'C'
        gdzie C jest pojedynczym znakiem, oznacza C. Nie może to być odwrotny ukośnik ani apostrof. Na przykład, %c':' oznacza dwukropek, nawet wewnątrz części then formatu if-then-else, którą normalnie by kończył.

    %c'\O'
        gdzie O jest łańcuchem 1, 2 lub 3 cyfr ósemkowych, oznacza znak o kodzie ósemkowym O. Na przykład, %c'\0' oznacza znak null.

    (A=B?T:E)
        Jeśli A równa się B, to T, w przeciwnym razie E. A i B są albo obie stałymi podanymi dziesiętnie albo pojedynczymi literami, interpretowanymi jak wyżej.

--line-format=formatlinii
    Użycie formatu formatlinii do wyprowadzenia wszystkich linii. To samo, co równoczesne użycie wszystkich opcji formatowania linii (--old-line-format, --new-line-format, --unchanged-line-format) z tym samym formatem. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--old-line-format=formatlinii
    Użycie formatu formatlinii do wyprowadzenia linii wziętej jedynie z pierwszego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--new-line-format=formatlinii
    Użycie formatu formatlinii do wyprowadzenia linii wziętej jedynie z drugiego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

--unchanged-line-format=formatlinii
    Użycie formatu formatlinii do wyprowadzenia wspólnej linii wziętej z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
    Format linii
    W formacie określającym sposób wypisania linii zwykłe znaki oznaczają same siebie; specyfikacje konwersji zaczynają się od znaku procentu % i mają jedną z poniższych postaci:

    %l  zawartość danej linii, nie licząc kończącego ją znaku nowej linii (jeśli jest takowy). Ten format ignoruje czy linia jest niekompletna czy poprawnie zakończona.

    %L  zawartość danej linii, łącznie z kończącym ją znakiem nowej linii (jeśli jest takowy). Jeżeli linia jest niekompletna, to zachowuje tę niekompletność.

    %[-][szer][.[dokł]]{doxX}n
        numer linii wejściowej, sformatowany w stylu printf.

    %%  dosłowny znak procentu %.

    %c'C'
        dosłowny znak C. Nie może to być odwrotny ukośnik ani apostrof.

    %c'\O'
        znak o kodzie ósemkowym O.

-l

--paginate
    Przesłanie wyjścia przez pr, aby podzielić je na strony.

-t

--expand-tabs
    Rozszerzanie tabulatorów do spacji na wyjściu, aby zachować oryginalne ułożenie tabulatorów pliku wejściowego.

-T

--initial-tab
    Wyprowadzenie tabulatora zamiast spacji przed tekstem linii w formacie normalnym lub kontekstowym. Powoduje to normalny wygląd tabulatorów w linii.

-r

--recursive
    Rekurencyjne porównanie wszystkich podkatalogów, jeśli porównywane są katalogi.

-N

--new-file
    Jeśli podczas porównywania katalogów plik istnieje jedynie w jednym z katalogów, będzie traktowany tak, jakby był obecny w drugim katalogu, ale pusty.

-P

--unidirectional-new-file
    Jeśli podczas porównywania katalogów plik istnieje jedynie w drugim katalogu, będzie traktowany tak, jakby był obecny w pierwszym katalogu, ale pusty.

-s

--report-identical-files
    Poinformowanie, jeśli oba pliki są identyczne.

-x wzorzec

--exclude=wzorzec
    Podczas porównywania katalogów, ignorowanie plików i podkatalogów, których nazwy pasują do wzorca wzorzec.

-X plik

--exclude-from=plik
    Podczas porównywania katalogów, ignorowanie plików i podkatalogów, których nazwa pasuje do jednego z wzorców podanych w pliku plik.

-S plik

--starting-file=plik
    Podczas porównywania katalogów rozpoczęcie od pliku plik. Opcja ta jest użyteczna podczas wznawiania przerwanego porównania.

--horizon-lines=linie
    Nie ignorowanie ostatnich linie linii wspólnego przedrostka oraz pierwszych linie linii wspólnego przyrostka.

-d

--minimal
    Zmiana algorytmu na taki, który może czasami znaleźć mniejszą liczbę zmian. Spowalnia to działania diff (czasami bardzo znacznie).

-H

--speed-large-files
    Użycie algorytmów heurystycznych aby przyspieszyć przeszukiwanie dużych plików ze znaczną liczbą rozrzuconych małych zmian.

-h  Ta opcja aktualnie nie ma żadnego efektu, ale istnieje dla zgodności z systemem Unix.

--sdiff-merge-assist
    Wyświetlenie dodatkowych informacji pomocnych dla sdiff. sdiff korzysta z tej opcji gdy uruchamia diff. Użytkownicy nie powinni korzystać z tej opcji bezpośrednio.

--help
    Wyświetlenie informacji o stosowaniu programu i dostępnych opcjach.

-v

--version
    Wyświetlenie numeru wersji programu.

KOPIOWANIE
Plik ten powstał na podstawie podręcznika info pakietu diffutils. Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.

ZOBACZ TAKŻE
cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1).

DIAGNOSTYKA
Zwracana wartość 0 oznacza, że nie odnaleziono różnic, 1 oznacza znalezienie różnic, a 2 kłopoty.