Это должно делать то, что вы просите.
Я удалил опцию-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
Ответ должен основываться на:
grep -axv '.*' file.txt
Чтобы найти (рекурсивно )все имена файлов (-l
), содержащие недопустимые символы, используйте:
(да имя файла не требуется)
grep -rlaxv '.*'
В
grep -axv '.*'
-x
предназначена для выбора целых строк (, требуемых следующей опцией ). -v
инвертирует то, что выбрано. (работает совместно с-x
). .*
будет соответствовать любому допустимому символу . Инвертированная с -v
, вся команда будет соответствовать любой целой строке, содержащей любой в -допустимый символ. Однако имейте в виду, что действительными или недействительными являются определения, которые зависят от кодировки читаемого файла. Если ваша система использует кодировку UTF -8 по умолчанию, команда обнаружит недопустимые последовательности UTF -8. Измените настройки локали, чтобы обнаружить другие кодировки.
Кроме того,цель команды — найти недопустимых символов. Если цель состоит в том, чтобы найти настоящие символы '�', просто найдите их:
grep -oP '�' file
Или, чтобы избежать путаницы по поводу того, какой символ (в bash, ksh, zsh ), составить список совпадающих имен файлов:
grep -rloP $'\Ufffd'
Дополнительные подробности приведены в этом ответе
Конечно, это не исправит файлы, просто перечислит их. Чтобы действительно исправить файлы (, если это возможно ), опубликуйте пример проблемы. Двух-трех строк будет достаточно.