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