W przypadku wersji 3.3 lub nowszej diffnależy skorzystać z --no-dereferenceopcji 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 difftraktuje 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 patchnie mogą reprezentować zmian w takich plikach. Na przykład, jeśli zmienisz plik, na który wskazuje dowiązanie symboliczne, diffwyświetli różnicę między dwoma plikami, zamiast zmiany na dowiązanie symboliczne.
diffpowinien opcjonalnie zgłaszać zmiany w specjalnych plikach i patchpowinien 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 findpominąć 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
rsyncscenariuszu.