디스크에서 동일하지만 파일 이름이 다른 중복 파일을 디스크에서 찾을 수 있습니까?
st_size
s 를 확인 하고 같은 것을 하나만 제거한 다음 st_size
s에 대한 md5sum 만 계산 하여 시간을 줄일 수 있습니다 .
디스크에서 동일하지만 파일 이름이 다른 중복 파일을 디스크에서 찾을 수 있습니까?
st_size
s 를 확인 하고 같은 것을 하나만 제거한 다음 st_size
s에 대한 md5sum 만 계산 하여 시간을 줄일 수 있습니다 .
답변:
fdupes
이것을 할 수 있습니다. 보낸 사람 man fdupes
:
지정된 파일에서 중복 파일을 검색합니다. 이러한 파일은 파일 크기와 MD5 서명을 비교 한 후 바이트 단위로 비교하여 찾을 수 있습니다.
데비안 또는 우분투에서는으로 설치할 수 있습니다 apt-get install fdupes
. Fedora / Red Hat / CentOS에서는로 설치할 수 있습니다 yum install fdupes
. 아치 리눅스에서는 pacman -S fdupes
, 젠투에서는 사용할 수 있습니다 emerge fdupes
.
파일 시스템 루트에서 내려 오는 검사를 실행하려면 상당한 시간과 메모리가 소요될 수 있습니다 fdupes -r /
.
의견에 따라 다음을 수행하여 가장 큰 사본을 얻을 수 있습니다.
fdupes -r . | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n
파일 이름에 줄 바꿈이 포함되어 있으면 중단됩니다.
fdupes ....... | xargs ls -alhd | egrep 'M |G '
파일을 사람이 읽을 수있는 형식으로 유지하고 크기가 메가 바이트 또는 기가 바이트 인 파일 만 유지하십시오. 실제 출력에 맞게 명령을 변경하십시오.
du
파이프로 sort
알려줍니다.
또 다른 좋은 도구는 fslint
다음과 같습니다.
fslint는 중복 파일 및 문제가있는 파일 이름 등을 포함하여 파일 시스템에 대한 다양한 문제를 찾는 도구 세트입니다.
GUI 외에 개별 명령 행 도구를 사용하여 액세스 할 수 있으며 표준 설치에서 / usr / share / fslint / fslint 디렉토리를 변경하거나 $ PATH에 추가 할 수 있습니다. 해당 디렉토리의 각 명령에는 매개 변수를 자세히 설명하는 --help 옵션이 있습니다.
findup - find DUPlicate files
데비안 기반 시스템에서는 다음과 같이 설치할 수 있습니다.
sudo apt-get install fslint
타사 도구를 원하지 않거나 설치할 수없는 경우에도 수동으로 수행 할 수 있습니다. 이러한 프로그램의 대부분의 작동 방식은 파일 체크섬 을 계산하는 것 입니다. 동일한 md5sum을 가진 파일은 거의 정확히 동일한 데이터를 포함합니다. 따라서 다음과 같이 할 수 있습니다.
find / -type f -exec md5sum {} \; > md5sums
gawk '{print $1}' md5sums | sort | uniq -d > dupes
while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes
샘플 출력 (이 예제의 파일 이름은 동일하지만 다른 경우에도 작동합니다) :
$ while read d; do echo "---"; grep $d md5sums | cut -d ' ' -f 2-; done < dupes
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/route.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/route.h
---
/usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild
/usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild
---
이것은 이미 언급 된 전용 도구보다 훨씬 느리지 만 작동합니다.
st_size
입니다.이 크기의 파일이 하나만있는 파일은 제거하고 동일한 파일 사이의 md5sum 만 계산하십시오 st_size
.
짧은 대답 : 예.
더 긴 버전 : wikipedia fdupes 항목을 살펴보면 , 미리 만들어진 솔루션의 훌륭한 목록을 보여줍니다. 물론 당신은 그렇지 않아, 자신을 작성할 수 있습니다 그 와 같은 해시 프로그램 - 어려운 diff
, sha*sum
, find
, sort
및 uniq
작업을 수행해야합니다. 한 줄에 넣을 수도 있으며 여전히 이해할 수 있습니다.
도메인에서 해시 함수 (여기서는 MD5)에 충돌이 없다고 생각되는 경우 :
find $target -type f -exec md5sum '{}' + | sort | uniq --all-repeated --check-chars=32 \
| cut --characters=35-
동일한 파일 이름을 그룹화 하시겠습니까? not_uniq.sh
출력을 형식화 하는 간단한 스크립트 를 작성하십시오 .
#!/bin/bash
last_checksum=0
while read line; do
checksum=${line:0:32}
filename=${line:34}
if [ $checksum == $last_checksum ]; then
if [ ${last_filename:-0} != '0' ]; then
echo $last_filename
unset last_filename
fi
echo $filename
else
if [ ${last_filename:-0} == '0' ]; then
echo "======="
fi
last_filename=$filename
fi
last_checksum=$checksum
done
그런 다음 find
스크립트를 사용하도록 명령을 변경 하십시오.
chmod +x not_uniq.sh
find $target -type f -exec md5sum '{}' + | sort | not_uniq.sh
이것이 기본 아이디어입니다. find
파일 이름에 일부 문자가 포함되어 있으면 변경 해야합니다. (예 : 공간)
나는 fdupes, 최근 강화 된 포크 추가 할 생각 jdupes 될 것을 약속, 빠른 및 fdupes보다 더 풍부한 더 기능 (예 : 크기 필터) :
jdupes . -rS -X size-:50m > myjdups.txt
현재 디렉토리에서 50MB보다 큰 중복 파일을 재귀 적으로 찾고 결과 목록을 myjdups.txt에 출력합니다.
출력은 크기별로 정렬되지 않으며 빌드되지 않은 것처럼 보이기 때문에 위의 @Chris_Down 답변을 조정했습니다.
jdupes -r . -X size-:50m | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n > myjdups_sorted.txt
Wikipedia에는 이 작업에 사용할 수있는 오픈 소스 소프트웨어 목록 이 포함 된 기사 ( http://en.wikipedia.org/wiki/List_of_duplicate_file_finders )가 있지만 지금은 삭제되었습니다 .
fslint의 GUI 버전은 매우 흥미 롭기 때문에 마스크를 사용하여 삭제할 파일을 선택할 수 있습니다. 복제 된 사진을 청소하는 데 매우 유용합니다.
Linux에서는 다음을 사용할 수 있습니다.
- FSLint: http://www.pixelbeat.org/fslint/
- FDupes: https://en.wikipedia.org/wiki/Fdupes
- DupeGuru: https://www.hardcoded.net/dupeguru/
FSLint를 확인하지 않은 많은 시스템 (Windows, Mac 및 Linux)에서 마지막 2 작업
여기에 내가 취하는 것이 있습니다.
find -type f -size +3M -print0 | while IFS= read -r -d '' i; do
echo -n '.'
if grep -q "$i" md5-partial.txt; then echo -e "\n$i ---- Already counted, skipping."; continue; fi
MD5=`dd bs=1M count=1 if="$i" status=noxfer | md5sum`
MD5=`echo $MD5 | cut -d' ' -f1`
if grep "$MD5" md5-partial.txt; then echo "\n$i ---- Possible duplicate"; fi
echo $MD5 $i >> md5-partial.txt
done
파일의 처음 1MB까지만 해시한다는 점이 다릅니다.
이것은 몇 가지 문제 / 기능이 있습니다 :
비디오 클립을 비교하는 데 사용하므로 이것으로 충분합니다.