Em primeiro lugar, não faça um loop pela saída de find . Em vez disso, use find para executar seu comando. Isso garante que os nomes de arquivos não fiquem desconfigurados. Pelo mesmo motivo, você precisa citar suas expansões variáveis .
mkdir -p "/md5check/$date/PD1"
find /oracle/PD1/sapbackup/b*/ -type f -newermt "$date" -exec sh '
for pathname do
printf "file = %s\n" "$pathname"
openssl md5 -binary "$pathname" | base64
done' sh {} + >"/md5check/$date/PD1/md5local.txt"
Isso localizaria qualquer arquivo regular dentro ou abaixo de qualquer um dos diretórios /oracle/PD1/sapbackup/b*/ que tivessem um registro de data e hora de modificação mais recente que $date . Para esses arquivos, um script curto é executado. O script imprime o nome do caminho do arquivo junto com a soma de verificação MD5 codificada em base64. A saída de find vai para o arquivo indicado no final.
O redirecionamento para o arquivo de saída poderia obviamente ser feito com >> dentro do script, mas isso significaria ter que abrir o arquivo de saída para gravar mais de uma vez (também, $date não está disponível lá). / p>
Veja também: