Jak różnicować dane wyjściowe wielu poleceń? vimdiff
może obsługiwać do czterech plików, ale diff
sam wydaje się obsługiwać dokładnie dwa pliki.
Czy jest to możliwe bezpośrednio z jakimś wariantem diff
, czy też muszę zapisać dane wyjściowe wszystkich poleceń w plikach tymczasowych, wybrać jeden i różnicować z nim resztę?
Kontekst:
Muszę sprawdzić dane wyjściowe określonego polecenia na wielu serwerach i sprawdzić, czy wszystkie się zgadzają. W tej chwili zgłaszanie, czy jakieś różnice zostaną znalezione, wydaje się dobre, ale jeśli to możliwe, chciałbym móc powiedzieć: X% serwerów zgadza się ze sobą, Y% ze sobą; lub ten serwer Z jest dziwny.
Mam czterostronną konfigurację LDAP z czterema ścieżkami i chcę sprawdzić, czy ContextCSN
wartości dla wszystkich czterech są ze sobą zgodne.
Więc teraz robię:
#! /bin/bash
for i in {1..4}.ldap
do
ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn;
done
set -e
for i in {2..4}
do
diff -q 1.csn $i.csn
done
I sprawdź kod błędu skryptu. Czy są na to lepsze narzędzia?
Wszelkie narzędzia, których można używać w systemie Ubuntu 14.04 welcome.
fdupes
Narzędzie może się przydać do was tutaj (powinno być w repozytoriach). Jeśli masz dużą liczbę plików do porównania, możesz użyć ich do zmniejszenia pracy, którą musisz wykonać, poprzez określenie, które z nich są już identyczne. Jak zauważono poniżej, działa tylko z argumentami katalogu. Jeśli masz wszystkie pliki do różnicowania w jednym katalogu, możesz zrobić coś takiego:Aby zidentyfikować pliki, które są takie same. Lub:
Aby zidentyfikować pliki, które są unikalne.
diff3
Polecenia mogą być również użyteczne.źródło
fdupes
wydaje się, że potrzebuje katalogu jako argumentu (łatwo go obejść), ale tak, liczba zwracanych plikówfdupes
jest bardzo przydatna.Jeśli chcesz tylko sprawdzić, czy pliki się zgadzają, naprawdę nie potrzebujesz różnic. Po prostu użyj
sha1sum
lub coś takiego.na przykład:
To da ci rozdzieloną spacjami listę serwerów, pary sha1sum. Serwery z tym samym sha1sum mają tę samą moc wyjściową:
Możesz wykonać dalsze przetwarzanie, aby uzyskać listę pasujących serwerów, na przykład:
co daje dane wyjściowe takie jak:
źródło