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

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

중복 파일을 찾는 명령을 찾았지만 너무 길어서 혼란스럽습니다.

예를 들어 삭제하면 -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

답변1

다음과 같이 단축할 수 있습니다.

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

md5sum발견된 파일에 대해 -exec작업을 수행 find하고 sort줄바꿈으로 구분된 동일한 내용을 가진 파일을 가져오는 작업을 수행합니다 uniq.md5sum

답변2

당신은 그것을 사용할 수 있습니다레플리카. 에서 man fdupes:

특정 경로에서 중복 파일을 검색합니다. 이러한 파일은 파일 크기를 MD5 서명과 비교한 다음 바이트별로 비교하여 찾습니다.

이렇게 호출하면 fdupes -r /path/to/dup/directory속은 사람의 목록이 인쇄됩니다.

고쳐 쓰다

시도해 볼 수 있습니다포슬린트반품. fslint를 설정한 후 다음으로 이동합니다.cd /usr/share/fslint/fslint && ./fslint /path/to/directory

답변3

원래 명령을 이해하고 싶다면 단계별로 살펴보겠습니다.

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

null로 구분된 각 이름에 대해 해당 파일의 MD5 체크섬을 계산합니다. 이번에는 여러 파일을 md5sum.

 | sort

uniq연속된 행만 고려 되므로 체크섬을 기준으로 정렬합니다 .

 | uniq -w32 --all-repeated=separate

처음 32바이트(체크섬, 뒤에 파일 이름)가 일치하는 행을 찾습니다. 다른 실행을 구분하는 개행을 사용하여 그러한 중복 항목의 모든 구성원을 인쇄합니다.

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

관련 정보