중복 파일을 찾으려면 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
:-) 다음을 사용할 수 있습니다.
- 비교할 파일:
$filename
- 비교할 파일:
files
배열 - 비교해야 할 파일 수
$count
(오류 하나의 차이에 유의)
while
루프를 통해 파일을 비교 $filename
하고 ${files[$some_counter]}
각 단계에서 모든 파일을 정렬할 수 있습니다.
이를 개선하려면 동일한 내용이 있는 파일만 확인해야 합니다 md5sum
. 이렇게 하려면 다음을 수행할 수 있습니다.
cut
파이프라인에서 제거read
md5 및 파일 이름을 읽도록 변경files
다른 md5로 이동할 때를 감지하면 어레이를 재설정하고
"현재" md5 및 .
중복된 비교를 피함으로써 더 나은 결과를 얻을 수 있습니다. 이렇게 하려면 files
이미 배열에 있는 동일한 파일을 추가하지 않도록 논리를 더 추가해야 합니다.
그리고 변수가 필요하지 않습니다 $count
.
확인해야 할(필요한 경우 수정해야 할) 매우 중요한 사항: 스크립트가 공백이 포함된 파일 이름이나 디렉터리 이름과 작동하는지 확인하세요.
계속 읽으세요배쉬 배열.