it-swarm-ko.tech

중복 파일을 찾는 가장 빠른 방법은 무엇입니까?

이 명령이 중복 파일을 찾는 데 사용되었지만 상당히 길어서 혼란 스러웠습니다. 예를 들어, -printf "% s\n"을 제거하면 아무 것도 나오지 않습니다. 왜 그랬어? 게다가, 그들은 왜 xargs -I {} -n1을 사용 했습니까? 중복 된 파일을 찾는 쉬운 방법이 있습니까?

[4a-o07-d1:root/798]#find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
0bee89b07a248e27c83fc3d5951213c1  ./test1.txt
0bee89b07a248e27c83fc3d5951213c1  ./test2.txt
30
The One

더 짧게 만들 수 있습니다.

find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD

하다 md5sum에서 찾은 파일 중 -execfind 작업 후 sortuniq 작업을 수행하여 md5sum 개행으로 구분됩니다.

45
heemayl

fdupes 를 사용할 수 있습니다. man fdupes에서 :

지정된 파일에서 중복 파일을 검색합니다. 이러한 파일은 파일 크기와 MD5 서명을 비교 한 다음 바이트 단위로 비교하여 찾을 수 있습니다.

fdupes -r /path/to/dup/directory와 같이 호출하면 듀피 목록이 인쇄됩니다.

업데이트

fslint 도 시도해 볼 수 있습니다. fslint를 설정 한 후 cd /usr/share/fslint/fslint && ./fslint /path/to/directory로 이동하십시오.

39
Rahul

원래 명령을 이해하려면 단계별로 진행하십시오.

find -not -empty -type f

현재 디렉토리 또는 하위 디렉토리에서 비어 있지 않은 파일을 모두 찾으십시오.

   -printf "%s\n"

크기를 인쇄하십시오. 이 인수를 삭제하면 대신 경로가 인쇄되어 후속 단계가 중단됩니다.

 | sort -rn

숫자로 정렬 (-n), 역순 (-r). 숫자가 아닌 문자열로 오름차순으로 정렬하고 비교하는 것도 마찬가지로 작동하므로 -rn 플래그.

 | uniq -d

중복되는 연속 행을 찾아서 유지하십시오.

 | xargs -I{} -n1

각 입력 줄에 대해 (즉, 두 번 이상 발생하는 각 크기) 다음 명령을 실행하되 {} 크기로. 단일 입력에 여러 입력을 전달하는 것과 달리 각 입력 행에 대해 명령을 한 번 실행하십시오.

   find -type f -size {}c -print0

이것은 각 크기에 대해 실행하는 명령입니다. 현재 디렉토리에서 해당 크기와 일치하는 문자 (c) 또는보다 정확하게 바이트로 지정된 파일을 찾으십시오. 개행 문자를 포함하는 파일 이름이 올바르게 처리되도록 일치하는 모든 파일 이름을 개행 문자 대신 널 바이트로 구분하여 인쇄하십시오.

 | xargs -0 md5sum

이러한 널로 구분 된 이름 각각에 대해 해당 파일의 MD5 체크섬을 계산하십시오. 이번에는 여러 파일을 단일 호출 md5sum.

 | sort

uniq는 연속 행만 고려하므로 체크섬으로 정렬합니다.

 | uniq -w32 --all-repeated=separate

첫 32 바이트 (체크섬, 그 다음에 파일 이름)에 일치하는 행을 찾으십시오. 개행으로 구분 된 개별 실행을 사용하여 이러한 중복 실행의 모든 ​​구성원을 인쇄하십시오.

heemayl이 제안한 더 간단한 명령 과 비교할 때, 같은 크기의 다른 파일을 가진 파일 만 체크섬한다는 이점이 있습니다. 반복 된 find 호출로이를 지불하여 디렉토리 트리를 여러 번 탐색합니다. 이러한 이유로 인해이 명령은 파일 크기는 적지 만 크기가 큰 디렉토리에 특히 적합합니다. 이러한 경우 체크섬 호출을 피하는 것이 반복적 인 트리 탐색을 피하는 것보다 중요 할 수 있기 때문입니다.

15
MvG