Você pode criar uma versão "normalizada" de cada arquivo XML com algo como:
xmllint --nospace --format orginal.xml > normalized.xml
Isso eliminaria espaços em branco "sem importância" para XML, recuo consistentemente e assim por diante. Depois disso, você pode usar cksum
para encontrar arquivos normalizados idênticos.
Vou sugerir um script:
for ORIGXML in *.xml
do
xmllint --noblank --format "$ORIGXML" > "normalized.$ORIGXML"
cksum "normalized.$ORIGXML" | sed 's/^normalized\.//' >> files.list
done
sort -k1.1 files.list > sorted.files
Não sei se me incomodaria com uma soma de verificação MD5. Você está procurando duplicatas, não fazendo criptografia com adversários malignos se opondo a você.
Se você estiver procurando por arquivos XML "quase idênticos", talvez você possa usar a Distância de compactação normalizada para ver como "distante" os arquivos são uns dos outros. Mais simplesmente, você poderia gzip
ou bzip2
os arquivos XML e, em seguida, classificar com base no tamanho do arquivo compactado. Quanto mais próximo o tamanho do arquivo compactado, mais idênticos serão os arquivos XML.