2016-11-30 17 views
1

각 파일은 스크립트가보기 전에 작성된 md5 체크섬을 가지고 있으므로이 .md5 파일이 이미 존재합니다 (파일이 바뀌면 바로 생성됩니다). 파일을 만든 시점부터 내가 본 시점까지 아무도 변경하지 않았는지 확인하고 있습니다.Bash MD5checksum 루프

내가하려는 것은이 목록을 반복하고, 모든 .md5 체크섬을 찾아서 실제 파일의 md5 체크섬과 비교하는 것입니다.

예 :이

-rwxr-xr-x 1 awiles awiles 209904416 Nov 29 17:53 590465-1_v1.200.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590465-1_v1.200.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 1341076 Nov 29 17:53 590466-1_v1.320.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590466-1_v1.320.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 214723375 Nov 29 18:03 590467-1_v2.700.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 18:03 590467-1_v2.700.tar.gz.md5* 
-r-xr-xr-x 1 awiles awiles 2482573113 Nov 29 18:02 590468-1_v1.020.tar.gz* 
-rwxr-xr-x 1 awiles awiles   46 Nov 29 18:02 590468-1_v1.020.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 28043339 Nov 29 17:53 590505-1_v1.040.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590505-1_v1.040.tar.gz.md5* 

나의 현재 bash는 코드 ...

for f in $DIR/* 
do 
    if [[ $f == *".md5" ]] ; then 
     md5sum -c $f 
    fi 
done 

나는 다음과 같은 오류를 받고 있어요 ...

... 내 디렉토리와 같은 모습입니다
md5sum: 590465-1_v1.200.tar.gz: No such file or directory 
590465-1_v1.200.tar.gz: FAILED open or read 
md5sum: WARNING: 1 listed file could not be read 

내가 여기서 뭘 잘못하고 있니?

+0

'md5sum'이 현재 디렉토리에서 파일 이름을 읽으려고합니다. 먼저 dir에'cd '할 수 있습니다. –

답변

1

md5sum의 출력으로 판단하면 590465-1_v1.200.tar.gz이 현재 디렉토리에 있어야합니다. 스크립트는 DIR. 일 때만 작동합니다. 그런 경우가 아니라면 는, 당신은 cd 첫번째 $DIR에,이 같은 예를 들어해야

(
cd "$DIR" && for f in * 
do 
    if [[ $f == *".md5" ]] ; then 
     md5sum -c $f 
    fi 
done 
) 

나는 당신이이 완료되면 cd "$OLDPWD"을 기억할 필요가 없습니다 그래서 (...)에 싸서. (스크립트에서 cd를 사용하면 자주 인해 감독에 이상한 버그로 연결됩니다.)

-1

간단한 방법 : 일부 유사한 방법

ls -1 *.md5 |while read line; do cat $line ; done|md5sum -c

:

md5sum * > checklist.chk # 어떤 파일에 대한 체크섬의 목록을 생성을 그 일치 *

md5sum -c checklist.chk # 목록을 통해 확인이 가능합니다.