많은 XML 파일(10K 작은 텍스트 파일)이 포함된 폴더를 생각해 보세요. 일부 XML 파일은 동일하고 일부는 다릅니다.
어떤 파일이 동일한지 확인하고 싶습니다(공백, 탭, 줄바꿈 무시) 어떻게든 각 클러스터의 파일을 기록합니다.
높은 정밀도는 필요하지 않으므로 MD5 또는 다른 해싱 알고리즘을 사용하는 것이 한 가지 방법이라고 생각합니다. 즉, 정확히 동일한 MD5 합계를 사용하여 파일 수를 세지만 미리 공백을 제거해야 합니다.
저는 OS X를 사용하고 있으며 다음과 같이 파일의 MD5를 확인할 수 있습니다.
$ md5 file_XYZ.xml
MD5 (file_XYZ.xml) = 0de0c7bea1a75434934c3821dcba759a
이것을 어떻게 사용하여 동일한 파일을 클러스터링할 수 있습니까? (동일한 해시를 가진 파일 이름을 가진 텍스트 파일이나 폴더에 클러스터된 파일이 트릭을 수행합니다)
답변1
다음을 사용하여 각 XML 파일의 "정규화된" 버전을 만들 수 있습니다.
xmllint --nospace --format orginal.xml > normalized.xml
이렇게 하면 XML에 "중요하지 않은" 공백, 일관된 들여쓰기 등이 제거됩니다. 나중에 cksum
동일한 것을 찾는 데 사용할 수 있습니다정규화됨문서.
나는 스크립트를 제안하고 싶습니다 :
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
MD5 체크섬이 필요한지 잘 모르겠습니다. 당신은 당신을 반대하는 사악한 상대와의 암호화가 아닌 중복을 찾고 있습니다.
"거의 동일한" XML 파일을 찾고 있다면 다음을 사용할 수 있습니다.표준화된 압축 거리파일이 서로 얼마나 "멀리" 떨어져 있는지 확인하십시오. 더 간단하게는 XML 파일을 gzip
정렬 bzip2
한 다음 압축 파일의 크기를 기준으로 정렬할 수 있습니다. 압축된 파일 크기가 가까울수록 XML 파일은 더 유사해집니다.