FSlint를 사용하여 파일 크기로만 중복 항목을 찾으십니까?

FSlint를 사용하여 파일 크기로만 중복 항목을 찾으십니까?

중복 파일을 찾기 위해 fslint를 사용하려고 하는데, 전체 수 기가바이트 파일을 해시하는 데 시간이 오래 걸립니다. ~에 따르면이 웹사이트, 다음과 같은 특징으로 비교할 수 있습니다.

기능 요약

compare by file size
compare by hardlinks
compare by md5 (first 4k of a file)
compare by md5 (entire file)
compare by sha1 (entire file)

하지만 GUI나 매뉴얼 페이지에는 이러한 옵션이 표시되지 않습니다. 여기서 뭔가 빠졌나요?


편집: 명령줄 대신 jdupes를 사용하고 있습니다.

jdupes -r -T -T --exclude=size-:300m --nohidden

이 작업을 수행하려면 git 저장소를 복제하고 소스에서 빌드해야 했습니다. (안타깝게도 패키지 버전은 오래되었습니다.)

또한 각각을 변경하려면 소스 코드를 편집해야 했습니다.

#define PARTIAL_HASH_SIZE 4096

도착하다

#define PARTIAL_HASH_SIZE 1048576

그런 다음 실제로 내 파일과 정확하게 일치했습니다. 왜 이런 식으로 인코딩했는지는 모르겠지만 처음 4096바이트를 일치시키는 것만으로는 충분하지 않으며 거짓 중복도 생성됩니다. (여기서 명령줄 옵션이 유용할 수도 있습니다)

답변1

FSlint는 이러한 모든 비교를 지원하지만 구성을 허용하지 않습니다. 항상 이 모든 정보를 사용하여 중복을 제거합니다.

findup이는 그 자체로 쉘 스크립트이며 각 비교는 별개입니다. 선택적 블록이 표시되므로 필요하지 않은 테스트를 건너뛰기 위해 주석 처리할 수 있습니다.

jdupes와 관련하여 귀하가질문해시 크기에 관해서는 여기에서 다루는 것보다 거기서 계속 논의하는 것이 더 생산적입니다.

답변2

find다음과 같이 파일 크기를 복사 할 수 있습니다 .

find -type f -printf "%s\n" | sort -n | uniq -d

그런 다음 원하는 대로 수행합니다. 예를 들어 grep입니다.

find -type f -printf "%s %p\n" \
| sort -n \
| grep -f <(find -type f -printf "^%s \n" | sort -n | uniq -d)

내용에 관계없이 동일한 크기의 항목을 찾습니다.

257659 ./b
257659 ./bsort
257764 ./a
257764 ./asort

처음 4096바이트만 일치시키는 것만으로는 충분하지 않으며 잘못된 중복이 생성됩니다.

해시 파일의 시작, 끝, 중간과 같은 조건을 자유롭게 추가하세요. 스크립트를 직접 작성하는 것은 그리 어렵지 않습니다.

그러나 전체 내용을 읽기 전에는 중복일 수도 있고 아닐 수도 있습니다. 차이는 어디에서나 발생할 수 있기 때문에 어떠한 경험적 방법도 모든 것을 포괄할 수는 없습니다. 그래서 지름길을 택하면 실수가 반복되는 것을 당연하게 받아들인다.

중복을 확인하는 가장 빠른 방법은 하드 링크로 만드는 것입니다. 동일한 파일이라면 더 이상 크기나 내용을 확인할 필요가 없습니다.

관련 정보