Попробуйте добавьте audit = 0
в строку ядра.
Это подарок systemd
, известное ограничение кода аудита в ядре, и он отслеживается здесь.
Необходимо исправить в ядре.
Это должно делать то, что вы просите.
Я удалил опцию-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
done
Во-первых, не зацикливайте вывод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
. Для этих файлов выполняется короткий скрипт. Сценарий печатает путь к файлу вместе с контрольной суммой MD5 в кодировке base64. Вывод find
идет в указанный файл в конце.
Очевидно, что перенаправление в выходной файл может быть выполнено с помощью >>
внутри скрипта, но это будет означать необходимость открывать выходной файл для записи более одного раза (также, $date
там недоступно ).
См. также: