O GNU diff v3.3 introduz a opção --no-dereference
que faz o truque. Esta opção é descrita por diff --help
, mas não mencionada na página man.
Estou tentando diferenciar dois diretórios usando (bem) diff
. No entanto, diff
segue os links simbólicos e compara as diferenças entre os arquivos de destino. Eu não consigo encontrar uma maneira de não ter diff
fazer isso. Em vez disso, o que eu gostaria de saber é se os objetivos são os mesmos (ou diferentes para esse assunto). Em outras palavras, se os links simbólicos apontam para o mesmo arquivo, (na minha opinião) eles são os mesmos, senão eles são diferentes e isso é tudo que eu quero que diff
me diga quando se deparar com links simbólicos durante uma chamada recursiva. / p>
Eu tentei procurar on-line, mas ou encontrei tópicos relacionados a lidar com links simbólicos sozinhos ou ignorá-los completamente.
Se você adicionar linhas como:
dir1/synlinkyfile.txt
config.mk
para um arquivo .ignore-diff
então você pode executar diff(1)
assim:
diff -ur -X .ignore-diff
O que eu sugiro é criar um arquivo dos ignores
find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^ File: \'//" | sed s/\'.*// >.ignore-diff
localiza todos os links simbólicos em subdiretórios, obtém a (s) linha (s) relevante (s), classifica-os (gosto de coisas alfabéticas) e resume-os a um caminho de arquivo simples e simples para os arquivos que são realmente links simbólicos. termina de redirecionar para .ignore-diff
é claro, há também a possibilidade de fazer o .ignore e, em seguida, fazer a mesma pesquisa novamente, mas tirar o último sed e adicionar mais alguns seds para eliminar todos os destinos, exceto os destinos.
find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^ File: \'//" | sed "s/.*-> \'//" | sed "s/'//g" | sed s/\'// > symlinks-dest
faça isso para cada diretório e, em seguida, você poderá diferenciar esses dois arquivos -detlinks para comparar os destinos dos links simbólicos.