首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从脚本中的openssl base64命令中获取md5值

从脚本中的openssl base64命令中获取md5值
EN

Unix & Linux用户
提问于 2018-06-13 03:46:19
回答 2查看 1.9K关注 0票数 0

我试图在oracle备份目录中获取最新文件的base64 md5值:

代码语言:javascript
复制
 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值:

代码语言:javascript
复制
# openssl md5 -binary /oracle/PD1/sapbackup/beyrnmmq/cntrlPD1.dbf | base64
Y1l1t+SGpQ7Jh0GZm9R5oQ==

如何使用for循环并将文件路径+ md5值输出到文件中?谢谢!

EN

回答 2

Unix & Linux用户

发布于 2018-06-13 06:35:07

首先是的输出不要循环。find。相反,使用find执行您的命令。这可以确保文件名不会损坏。出于同样的原因,您需要引用您的变量展开

代码语言:javascript
复制
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在脚本中不可用)。

另请参阅:

票数 1
EN

Unix & Linux用户

发布于 2018-06-13 04:20:56

这应该能满足你的要求。

我删除了-binary选项,因为我认为您需要md5哈希。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/449431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档