스크립트의 openssl md5 명령에서 base64 값 가져오기

스크립트의 openssl md5 명령에서 base64 값 가져오기


Oracle 백업 디렉터리에 있는 최신 파일의 base64 md5 값을 가져오려고 합니다.

 for file in "$(find /oracle/PD1/sapbackup/b*/ -newermt $date -type f)"; do openssl md5 -binary $file | base64 && echo $file >>/md5check/$date/PD1/md5local.txt; done

이 명령을 실행하면 전체 md5 체크섬을 얻을 수 있지만 Y1l1t+SGpQ7Jh0GZm9R5oTrEvfcGM7NaCuYediMH2MY= base64 값을 얻고 싶습니다.

# openssl md5 -binary /oracle/PD1/sapbackup/beyrnmmq/cntrlPD1.dbf | base64
Y1l1t+SGpQ7Jh0GZm9R5oQ==

for 루프를 사용하여 이 작업을 수행하고 파일 경로 + md5 값을 파일로 출력하려면 어떻게 해야 합니까?
감사해요!

답변1

첫 번째,출력을 반복하지 마십시오find. 대신 find명령을 실행하는 데 사용하십시오. 이렇게 하면 파일 이름이 손상되지 않습니다. 같은 이유로 당신이 필요합니다변수 확장 견적.

mkdir -p "/md5check/$date/PD1"

find /oracle/PD1/sapbackup/b*/ -type f -newermt "$date" -exec sh -c '
    for pathname do
        printf "file = %s\n" "$pathname"
        openssl md5 -binary "$pathname" | base64
    done' sh {} + >"/md5check/$date/PD1/md5local.txt"

/oracle/PD1/sapbackup/b*/그러면 수정 타임스탬프가 $date. 이러한 파일의 경우 짧은 스크립트가 실행됩니다. 스크립트는 파일의 경로 이름과 base64로 인코딩된 MD5 체크섬을 인쇄합니다. 의 출력은 find마지막으로 지정된 파일로 이동합니다.

출력 파일로의 리디렉션은 분명히 스크립트 내에서 수행될 수 있지만 >>이는 여러 쓰기를 위해 출력 파일을 열어야 함을 의미합니다(게다가 $date여기서는 사용할 수 없음).

또한보십시오:

답변2

이는 귀하의 요구 사항을 충족해야 합니다.

난 ~를 지웠어-바이너리옵션은 당신이 md5 해시를 원한다고 생각하기 때문입니다.

for file in "$(find /oracle/PD1/sapbackup/b*/ -newermt $date -type f)"
do 
     MD5=$(openssl md5 $file | awk '{ print $2 }')
     BASE64=$(echo $MD5 | base64)
     echo "$file : md5 => [ ${MD5} ] / base64 => [ ${BASE64} ]" >> /md5check/$date/PD1/md5local.txt
done

관련 정보