Używam diff -r a b
do rekurencyjnego porównywania katalogów a i b . Często zdarza się jednak, że istnieją pewne niedziałających linków (te same linki zarówno A i b katalogów i wskazując tym samym, nieistniejących celów).
diff następnie wyświetla komunikaty o błędach dla tych przypadków i kończy działanie z niezerowym kodem wyjścia, jednak chciałbym, aby pozostało cicho i wychodziło z 0, ponieważ katalogi są takie same w mojej książce.
Jak mogę to zrobić?
Odpowiedzi:
W przypadku wersji 3.3 lub nowszej
diff
należy skorzystać z--no-dereference
opcji opisanej w odpowiedzi Pete'a Harlana .Niestety starsze wersje
diff
nie obsługują ignorowania dowiązań symbolicznych :Jeśli wszystko, czego chcesz, to zweryfikować rsync (i prawdopodobnie naprawić to, czego brakuje), możesz po prostu uruchomić polecenie rsync po raz drugi. Jeśli nie chcesz tego robić, podsumowanie katalogu może być wystarczające.
Jeśli naprawdę chcesz to zrobić
diff
, możeszfind
pominąć dowiązania symboliczne i uruchomić diff dla każdego pliku osobno. Zdać katalogów i B jako argumenty:lub jako jedna linijka:
To identyfikacji plików, które różnią się pod względem treści lub plików, które są w ale nie w b .
Uwaga:
rsync
scenariuszu.źródło
for f in
Znajdź / *! -typ l;do echo $f b/${f#*/};done
. Jednak nie mam teraz czasu na przetestowanie tego. Daj mi znać, czy działa.$(xxx)
zamiast backticks. Symetria wstecznych sprawia, że są mniej czytelne i zapobiegają zagnieżdżaniu. Odnośnie 1 i 2 patrz stackoverflow.com/questions/11366184/…Od wersji 3.3 GNU
diff
nie obsługuje dereferencji dowiązań symbolicznych, ale porównuje ścieżki, na które wskazują.Zainstaluj GNU
diffutils
> = 3.3 i skorzystaj z--no-dereference
opcji; nie ma na to krótkiej opcji.Diagnostyka będzie cicha, jeśli będzie równa lub:
Linki symboliczne
/tmp/noderef/a/symlink
i/tmp/noderef/b/symlink
różnią sięźródło
Możesz użyć nowszej wersji
diff
W
diff
GNUdiffutils
3.3 zawiera--no-dereference
opcję, która pozwala porównywać same dowiązania symboliczne, a nie ich cele. Informuje, czy się różnią, jest cicho, jeśli się zgadzają i nie obchodzi, czy są zepsute.Nie wiem, kiedy dodano opcję; nie jest obecny w 2.8.1.
źródło