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 :
Niektóre pliki nie są katalogami ani zwykłymi plikami: są to niezwykłe pliki, takie jak dowiązania symboliczne, specjalne pliki urządzeń, nazwane potoki i gniazda. Obecnie diff
traktuje dowiązania symboliczne jak zwykłe pliki; traktuje inne pliki specjalne jak zwykłe pliki, jeśli są określone na najwyższym poziomie, ale po prostu zgłasza ich obecność podczas porównywania katalogów. Oznacza to, że patch
nie mogą reprezentować zmian w takich plikach. Na przykład, jeśli zmienisz plik, na który wskazuje dowiązanie symboliczne, diff
wyświetli różnicę między dwoma plikami, zamiast zmiany na dowiązanie symboliczne.
diff
powinien opcjonalnie zgłaszać zmiany w specjalnych plikach i patch
powinien zostać rozszerzony, aby zrozumieć te rozszerzenia.
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żesz find
pominąć dowiązania symboliczne i uruchomić diff dla każdego pliku osobno. Zdać katalogów i B jako argumenty:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
lub jako jedna linijka:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
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:
- ponieważ całkowicie pomijamy dowiązania symboliczne, nie zauważy to, jeśli nazwy dowiązań symbolicznych nie występują w b . Jeśli tego potrzebujesz, potrzebujesz drugiego hasła wyszukiwania, aby zidentyfikować wszystkie dowiązania symboliczne, a następnie jawnie sprawdzić ich obecność w b .
- Dodatkowe pliki wb nie zostaną zidentyfikowane, ponieważ lista jest zbudowana z zawartości a . Prawdopodobnie nie jest to problem w twoim
rsync
scenariuszu.