ㅏ이전 답변한 기사에서는 dd 드라이브 복제 이미지의 이미지에서 sha1 해시를 실행하는 것에 대해 언급했습니다.
다른해당 게시물에 답글을 달아주세요dd 이미지를 설치한 다음 "중요 파일"의 sha1 해시를 비교하여 일치하는지 확인하는 것이 좋습니다.
두 번째 방법을 사용하고 싶지만 파일을 수동으로 선택하는 대신 무작위로 선택된 여러 파일을 사용하고 싶습니다.
두 개의 마운트된 파티션이 있다고 가정할 때, 무작위 파일 묶음을 선택하고 sha1 해시를 비교한 후 해시가 동일하지 않으면 중지하고 오류를 표시할 수 있습니까?
모든 것이 제대로 진행되면 출력은 대략 다음과 유사해야 합니다.
확인: 무작위로 선택된 10000개의 모든 파일에는 sha1과 일치하는 파티션 sda 및 sdb가 있습니다.
또는 오류가 발생한 경우에만 출력이 표시되고 두 파티션에서 sha1 합계가 다른 파일 이름이 표시되어야 합니다.
현재 진행 중인 코드:
#!/bin/bash
N=5
mydir="/home"
dirlisting=`find $mydir |sort -R |tail -$N`
for fname in $dirlisting
do
echo $fname
done
답변1
귀하의 질문을 이해하면 N개의 임의 파일이 두 파일 시스템 경로 간에 다른지 확인하고 싶습니다. 파일을 비교하는 것은 두 파일의 체크섬을 계산하는 것보다 빠릅니다. 다음을 수행할 수 있습니다.
#!/bin/sh
list1=/tmp/list1
list2=/tmp/list2
shuflist=/tmp/shuflist
n=100000 # How many files to compare.
if test ! -d "$1" -o ! -d "$2"; then
echo "Usage: $0 path1 path2"
exit 1
fi
exitcode=0
(cd "$1" && find . -type f >"$list1") || exit 1
(cd "$2" && find . -type f >"$list2") || exit 1
if cmp -s "$list1" "$list2"; then
shuf -n "$n" "$list1" > "$shuflist"
while IFS= read -r filename; do
if ! cmp -s "$1/$filename" "$2/$filename"; then
echo "Files '$1/$filename' and '$2/$filename' differ."
exitcode=1
break
fi
done < "$shuflist"
else
echo File lists differ.
exitcode=1
fi
rm "$list1" "$list2" "$shuflist"
exit $exitcode
이 스크립트에서는 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.
답변2
두 디렉터리의 파일과 하위 디렉터리를 비교하려면 다음을 수행하십시오.차이점명령을 사용하면 이 작업을 수행할 수 있습니다. 실행하여diff -rq /경로/to/fileset1 /path/to/fileset2, 어떤 파일이 다르며 어떤 파일이 어떤 트리에서 누락되었는지 알려줍니다. 감사 목적으로 모든 변경 사항에 대한 자세한 목록을 제공하도록 명령을 확장할 수도 있습니다.diff -rNau /경로/to/fileset1 /path/to/fileset2예를 들어 변경 사항을 저장하려는 위치로 출력을 리디렉션합니다.