중복 파일 찾기

중복 파일 찾기

중복 파일을 찾으려면 bash 스크립트를 작성해야 하지만 그 이상으로는 최종 확인에 md5sum사용해야 합니다 . cmp쉘에서 다음 명령을 시도했습니다. 루프를 추가하고 이를 bash 스크립트에 넣으려면 어떻게 해야 합니까?

find . -type f | xargs -I%  md5sum % | sort | uniq -w32 -D| cut  -f3 -d' ' 

답변1

숙제라고 했으니 해결책보다는 팁을 알려드리겠습니다.

다음과 같이 시작할 수 있습니다.

find . -type f|xargs -I%  md5sum % |sort \
 |uniq -w32 -D|cut -f3 -d' '|while read filename ; do

   # code here

done

while루프 내부에는 filename파이프라인에서 감지한 파일 중 하나의 이름이 포함됩니다.

아이디어는 각 파일을 이전 파일과 비교하는 것입니다. 이렇게 하려면 루프 끝에서 현재 파일을 배열에 추가합니다.

count=0
find . -type f|xargs -I%  md5sum % |sort \
 |uniq -w32 -D|cut -f3 -d' '|while read filename ; do

 # code here

 files[$cout]="$filename"
 count=$((count+1))
done

지금 해야 할 일은 내용을 작성하는 것뿐입니다 #code here:-) 다음을 사용할 수 있습니다.

  1. 비교할 파일:$filename
  2. 비교할 파일: files배열
  3. 비교해야 할 파일 수 $count(오류 하나의 차이에 유의)

while루프를 통해 파일을 비교 $filename하고 ${files[$some_counter]}각 단계에서 모든 파일을 정렬할 수 있습니다.


이를 개선하려면 동일한 내용이 있는 파일만 확인해야 합니다 md5sum. 이렇게 하려면 다음을 수행할 수 있습니다.

  1. cut파이프라인에서 제거
  2. readmd5 및 파일 이름을 읽도록 변경
  3. files다른 md5로 이동할 때를 감지하면 어레이를 재설정하고

"현재" md5 및 .


중복된 비교를 피함으로써 더 나은 결과를 얻을 수 있습니다. 이렇게 하려면 files이미 배열에 있는 동일한 파일을 추가하지 않도록 논리를 더 추가해야 합니다.

그리고 변수가 필요하지 않습니다 $count.

확인해야 할(필요한 경우 수정해야 할) 매우 중요한 사항: 스크립트가 공백이 포함된 파일 이름이나 디렉터리 이름과 작동하는지 확인하세요.


계속 읽으세요배쉬 배열.

관련 정보