Para a versão 3.3 ou posterior diff, você deve usar a --no-dereferenceopção, conforme descrito na resposta de Pete Harlan .
Infelizmente, versões mais antigas diff do não suportam ignorar links simbólicos :
Alguns arquivos não são diretórios nem arquivos regulares: são arquivos incomuns, como links simbólicos, arquivos especiais de dispositivos, pipes nomeados e soquetes. Atualmente, difftrata links simbólicos como arquivos regulares; trata outros arquivos especiais, como arquivos regulares, se forem especificados no nível superior, mas simplesmente relata sua presença ao comparar diretórios. Isso significa que patchnão pode representar alterações nesses arquivos. Por exemplo, se você alterar para qual arquivo um link simbólico aponta, diffgera a diferença entre os dois arquivos, em vez da alteração no link simbólico.
diffopcionalmente, deve relatar alterações em arquivos especiais e patchdeve ser estendido para entender essas extensões.
Se tudo o que você deseja é verificar um rsync (e presumivelmente corrigir o que está faltando), execute o comando rsync pela segunda vez. Se você não quiser fazer isso, a soma do diretório pode ser suficiente.
Se você realmente deseja fazer isso diff, pode findpular os links simbólicos e executar o diff em cada arquivo individualmente. Passe seus diretórios a e b em como argumentos:
#!/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
ou como uma linha:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
Isso identificará arquivos que diferem em conteúdo ou arquivos que estão em a, mas não em b .
Observe que:
- como estamos pulando links simbólicos por inteiro, isso não notará se os nomes dos links simbólicos não estiverem presentes em b . Se você exigisse isso, seria necessário um segundo passe de localização para identificar todos os links simbólicos e, em seguida, verificar explicitamente a existência deles em b .
- Arquivos extras em b não serão identificados, pois a lista é construída a partir do conteúdo de a . Isso provavelmente não é um problema para o seu
rsynccenário.