I have a 쉘로 스크립트입니다 데릭쉐퍼드와 여부를 확인할 수 있는 두 개의 파일이 같은 방관하겠나. '는 이 많은 파일이므로 나는한다 대한 내 스크립트입니다 diff' 명령을 성능 병목지역 것으로 보인다.
diff -q $dst $new > /dev/null
if ($status) then ...
사용자 정의 알고리즘입니다 비교할 수 있을까, 어쩌면 더 빨리 파일이 diff '대신' 기본값입니다?
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
내가 할 수 있는 것을 확인할 수 있는 이 파일을 ssh 터미널 또는 실행하십시오 상수입니다 절실해졌습니다.
예를 들어 (script.sh) 및 정보기술 (it) 이 스크립트입니다 시도하시겠습니까 호출하십시오 실행하십시오 이를 다음과 같이 표현하였다. script.sh file1.txt file2.txt
#!/bin/bash
file1=`md5 $1`
file2=`md5 $2`
if [ "$file1" = "$file2" ]
then
echo "Files have the same content"
else
echo "Files have NOT the same content"
fi
이 두 개의 파일을 읽을 수 있는 모든 방법을 완전히 다르게 파일내에서 경우에도 롬폭 검토완료 필요하게 될 것이라고 강조했습니다.
대안이 없다. 그래서 해시 체크섬 생성 또는 특정 시점에서 单捞磐啊 판독값 전체 파일을. 대용량 파일을 시행하십시오 하게하면서요.
파일 메타데이터를 읽어들이기가 대용량 파일을 읽는 것보다 훨씬 빠릅니다.
따라서 유지됩니까 데 사용할 수 있는 파일은 파일 메타데이터를 建立既能衡量 달랐다구? 파일 크기? 심지어 작은 부분을 읽는 않는 결과를 파일 명령 파일?
파일 크기 예제 코드 조각:
ls -l $1 $2 |
awk 'NR==1{a=$5} NR==2{b=$5}
END{val=(a==b)?0 :1; exit( val) }'
[ $? -eq 0 ] && echo 'same' || echo 'different'
파일 크기가 동일한 경우 전체 파일 판독합니다 함께 하는 것입니다.
크섬 시도하시겠습니까 명령을 사용할 수 있다.
chk1=`cksum <file1> | awk -F" " '{print $1}'`
chk2=`cksum <file2> | awk -F" " '{print $1}'`
if [ $chk1 -eq $chk2 ]
then
echo "File is identical"
else
echo "File is not identical"
fi
이 명령은 출력입니다 크섬 바이트 수를 파일입니다. # 39, & # 39, 양반이군요 cksum& 참조.
왜냐면 난 빨아들일 수 밖에 없는 만큼, t # 39 점, 그리고 내가 can& don& # 39 에 추가 이 맛있는 가벼운 음식 셀명.
그러나 사용하려는 경우 '이' cmp 명령 (및 don& # 39, t need / want to be 세부 정보) 종료하십시오 눈 상태가 됩니다. 이 '당' cmp 맨페이지를:
>. & # 39, & # 39 는 파일이. 또는 누락, 검토완료 표준 입력입니다. 종료 상태는 0 >. 만약 다른 경우 문제가 발생할 경우 투입물 같은 경우 1, 2.
따라서 다음과 같은 항목을 할 수 있는
STATUS="$(cmp --silent $FILE1 $FILE2; echo $?)" # "$?" gives exit status for each comparison
if [[$STATUS -ne 0]]; then # if status isn't equal to 0, then execute code
DO A COMMAND ON $FILE1
else
DO SOMETHING ELSE
fi
일부 테스트를 하고 있는 라즈베리 파이 3B+ (I& # 39 m, 오버레이로 사용하여 파일 시스템, medianame 동기화하려면 주기적으로), 내가 내 스스로 실행했음 diff 를 위한 비교 - q 와 cmp - s; 이것이 내부에서 로그 / dev / 시마 도왔으매 디스크 액세스만으로 속도용으로 비 문제 있다.
[root@mypi shm]# dd if=/dev/urandom of=test.file bs=1M count=100 ; time diff -q test.file test.copy && echo diff true || echo diff false ; time cmp -s test.file test.copy && echo cmp true || echo cmp false ; cp -a test.file test.copy ; time diff -q test.file test.copy && echo diff true || echo diff false; time cmp -s test.file test.copy && echo cmp true || echo cmp false
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 6.2564 s, 16.8 MB/s
Files test.file and test.copy differ
real 0m0.008s
user 0m0.008s
sys 0m0.000s
diff false
real 0m0.009s
user 0m0.007s
sys 0m0.001s
cmp false
cp: overwrite âtest.copyâ? y
real 0m0.966s
user 0m0.447s
sys 0m0.518s
diff true
real 0m0.785s
user 0m0.211s
sys 0m0.573s
cmp true
[root@mypi shm]# pico /root/rwbscripts/utils/squish.sh
내가 이 실행했음 두어번이요 cmp 일관되게 약간 짧은 시간이 있었다 - s 테스트 기입란 내가 사용하고 있었습니다. 그래서 둘 사이에 파일을 사용하려면 cmp - s to do things.
identical (){
echo "$1" and "$2" are the same.
echo This is a function, you can put whatever you want in here.
}
different () {
echo "$1" and "$2" are different.
echo This is a function, you can put whatever you want in here, too.
}
cmp -s "$FILEA" "$FILEB" && identical "$FILEA" "$FILEB" || different "$FILEA" "$FILEB"