スクリプトの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

関連情報