Porównanie dwóch katalogów

Pewnie kiedyś zastanawialiście się nad tym jak porównać zawartość dwóch katalogów, z pomocą przychodzi polecenie diff. Pokażę w kilku przykładach co możemy uzyskać za pomocą tego polecenia.

Przygotowanie
Na początek stworzymy dwa katalogi temp1 oraz temp2, katalog temp1 będzie zawierał, takie pliki: 1, 2, 3, 4, natomiast temp2 będzie zawierał pliki: 2, 4, 5, 6. Plik temp1/1 będzie zawierał znak '1', natomiast plik temp2/1 będzie zawierał znak '2'. W obydwu katalogach będą znajdowały się podkatalogi subdir w podkatalogu subdir katalogu temp2 utworzymy plik 9.

$ mkdir -p {temp1/subdir,temp2/subdir}
$ touch temp1/{1,2,3,4}
$ touch temp2/{2,4,5,6,subdir/9}
$ echo '1' > temp1/1
$ echo '2' > temp2/2

Porównanie dwóch katalogów i wyświetlenie różnic pomiędzy plikami

$ diff temp1 temp2
Only in temp1: 1
diff temp1/2 temp2/2
0a1
> 2
Only in temp1: 3
Only in temp2: 5
Only in temp2: 6
Common subdirectories: temp1/subdir and temp2/subdir

Inny format diff można uzyskać za pomocą parametru -u

$ diff -u temp1 temp2
Only in temp1: 1
diff -u temp1/2 temp2/2
--- temp1/2     Mon Dec 19 07:53:45 2011
+++ temp2/2     Mon Dec 19 07:54:13 2011
@@ -0,0 +1 @@
+2
Only in temp1: 3
Only in temp2: 5
Only in temp2: 6
Common subdirectories: temp1/subdir and temp2/subdir

Urzywając parametru -q uzyskamy tylko informacje o tym które pliki różnią się od siebie.

$ diff -q temp1 temp2
Only in temp1: 1
diff -q temp1/2 temp2/2
Files temp1/2 and temp2/2 differ
Only in temp1: 3
Only in temp2: 5
Only in temp2: 6
Common subdirectories: temp1/subdir and temp2/subdir

Porównanie rekursywne katalogów
Jak widać, w powyższych przykładach, żaden z wyników nie zawiera wzmianki na temat pliku temp2/subdir/9, dzieje się tak dlatego, że polecenie diff nie przetwarza podkatalogów. Żeby zmusić diff do przetwarzania podkatalogów należy użyć parametru -r.

$ diff -qr temp1 temp2
Only in temp1: 1
diff -qr temp1/2 temp2/2
Files temp1/2 and temp2/2 differ
Only in temp1: 3
Only in temp2: 5
Only in temp2: 6
Only in temp2/subdir: 9

Porównanie rekursywne katalogów oraz wyświetlenie różnic pomiędzy plikami
Polecenie diff pokaże różnice pomiędzy plikami oraz katalogami uwzględniając podkatalogi.

$ diff -qur temp1 temp2
Only in temp1: 1
diff -qur temp1/2 temp2/2
--- temp1/2     Mon Dec 19 07:53:45 2011
+++ temp2/2     Mon Dec 19 07:54:13 2011
@@ -0,0 +1 @@
+2
Only in temp1: 3
Only in temp2: 5
Only in temp2: 6
Only in temp2/subdir: 9

Linki

Komentarze są wyłączone.