Execute o diff nos links simbólicos

2

Eu tenho duas pastas contendo vários links simbólicos quebrados.

Existe uma maneira de fazer com que diff compare o alvo dos links em vez de tentar seguir os links?

    
por To Do 28.01.2013 / 15:04

1 resposta

1

Com o "conteúdo dos links", assumo que você quer dizer "alvo do link". Se isso é correto, então sim, existe. Tipo de. E você tem que obter creatie com redirecionamento de shell:)

diff -u \
<(cd /path/to/dir1 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort) \
<(cd /path/to/dir2 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort)

O que isto faz é executar diff com como entrada a saída de dois comandos:

cd /path/to/dir1 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort
cd /path/to/dir2 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort

Esses comandos find | grep | sort exibem o nome e o destino de todos os links simbólicos que ele pode encontrar em dir1 e dir2, junto com seus destinos. Portanto, o resultado final é que você verá quais links simbólicos são diferentes.

(Editado a partir da resposta original, que incluía o caminho completo para o nome do arquivo na saída de ls e, portanto, mostrava cada arquivo como diferente. Trabalhou com isso usando cd . Além disso, se os links simbólicos tivessem diferentes datas e horas, o diff iria mostrá-los como diferentes também. Trabalhou em torno disso usando stat para extrair as informações que realmente queremos.)

    
por Dennis Kaarsemaker 28.01.2013 / 15:09