나는 중복된 파일이 많이 포함되어 있는 디렉토리 구조를 가지고 있습니다. (디렉토리 트리에는 67,000개의 파일이 있으며 약 8,000개의 중복 파일이 있습니다.) 물론 복제본의 바이트 크기와 내용은 동일하지만 파일 이름은 완전히 다릅니다. fdupes /dir/path -rm을 사용할 때 125개의 중복 항목만 얻습니다. 그러나 전체 디렉터리 트리 내용의 SHA256을 텍스트 파일로 덤프하면 다음과 같습니다.
input_dir=$1
IFS=$'\n'
for i in $(find ${input_dir} -type f); do
sha256sum "${i}" >> dupfilenames.txt
done
그런 다음 중복된 SHA256 서명을 검색합니다.
cat dupfilenames.txt | cut -d " " -f1 | sort | uniq | while read sha; do
count=`cat dupfilenames.txt | grep ${sha} | wc -l`
if [ $count -gt 1 ]; then
echo "${sha}:${count}"
IFS=$'\n'
files=( $(cat dupfilenames.txt | grep ${sha} | cut -d " " -f3) );
orig_size=`stat -c%s "${files[0]}"`
for i in "${files[@]:1}"; do
if [ $orig_size -eq `stat -c%s "${i}"` ]; then
echo "Origsize:${orig_size} vs. `stat -c%s "${i}"` '${i}'"
else
echo "SHA matches but filesize doesn't for '${i}'!!!"
fi
done
fi
done
코드를 실행한 후 약 8000개의 중복 서명을 얻었습니다.
이는 fdupes에서 사용하는 MD5 서명이 부족하기 때문입니까? (바이트당 파일 크기는 말할 것도 없고 정확히 동일한 내용의 파일이 125개 이상 있다는 것을 알고 있습니다.
답변1
알았어, 알아냈어 - 명시적인 스위치( -H )가 지정되지 않으면 fdupes는 하드 링크된 파일을 무시합니다. 이것이 중복 파일 수의 차이가 발생하는 이유입니다. -H 스위치를 사용하여 실행하면 중복 횟수는 위에서 인용한 코드와 동일합니다.