Estou usando diff -r a b
para comparar recursivamente os diretórios a e b . Muitas vezes acontece que embora existem alguns links quebrados (os mesmos links quebrados em ambas a e b diretórios e apontando para os mesmos, alvos não-existentes).
diff então envia mensagens de erro para esses casos e sai com um código de saída diferente de zero, no entanto, gostaria que ele permanecesse silencioso e saia com 0, pois os diretórios são iguais no meu livro.
Como eu posso fazer isso?
Respostas:
Para a versão 3.3 ou posterior
diff
, você deve usar a--no-dereference
opção, conforme descrito na resposta de Pete Harlan .Infelizmente, versões mais antigas
diff
do não suportam ignorar links simbólicos :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
, podefind
pular os links simbólicos e executar o diff em cada arquivo individualmente. Passe seus diretórios a e b em como argumentos:ou como uma linha:
Isso identificará arquivos que diferem em conteúdo ou arquivos que estão em a, mas não em b .
Observe que:
rsync
cenário.fonte
for f in
encontre um / *! tipo l;do echo $f b/${f#*/};done
. Eu não tenho tempo para testar isso agora. Deixe-me saber se isso funciona.$(xxx)
vez de backticks. A simetria dos backticks os torna menos legíveis e evita o aninhamento. Em relação a 1 e 2, consulte stackoverflow.com/questions/11366184/…Desde a versão 3.3, o GNU
diff
não suporta a remoção de links simbólicos, mas compara os caminhos para os quais eles apontam.Instale o GNU
diffutils
> = 3.3 e use a--no-dereference
opção; não existe uma opção curta para isso.O diagnóstico será silencioso se for igual ou:
Links simbólicos
/tmp/noderef/a/symlink
e/tmp/noderef/b/symlink
diferentesfonte
Você pode usar uma versão mais recente do
diff
O
diff
no GNUdiffutils
3.3 inclui uma--no-dereference
opção que permite comparar os links simbólicos em si e não em seus destinos. Relata se eles diferem, fica quieto se eles concordam e não se importa se estão quebrados.Não sei quando a opção foi adicionada; não está presente no 2.8.1.
fonte