我试图在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值输出到文件中?谢谢!
发布于 2018-06-13 06:35:07
首先是的输出不要循环。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在脚本中不可用)。
另请参阅:
发布于 2018-06-13 04:20:56
这应该能满足你的要求。
我删除了-binary选项,因为我认为您需要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
donehttps://unix.stackexchange.com/questions/449431
复制相似问题