Найти все файлы с символом: �

Это должно делать то, что вы просите.

Я удалил опцию-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
0
08.05.2020, 19:01
1 ответ

Ответ должен основываться на:

grep -axv '.*' file.txt

Чтобы найти (рекурсивно )все имена файлов (-l), содержащие недопустимые символы, используйте:
(да имя файла не требуется)

grep -rlaxv '.*'

В

grep -axv '.*'
  • Команда -a предназначена для открытия файлов, которые могут отображаться как двоичные (, а не текстовые ), для grep.
  • Кнопка -xпредназначена для выбора целых строк (, требуемых следующей опцией ).
  • -vинвертирует то, что выбрано. (работает совместно с-x).
  • Регулярное выражение .*будет соответствовать любому допустимому символу . Инвертированная с -v, вся команда будет соответствовать любой целой строке, содержащей любой в -допустимый символ.

Однако имейте в виду, что действительными или недействительными являются определения, которые зависят от кодировки читаемого файла. Если ваша система использует кодировку UTF -8 по умолчанию, команда обнаружит недопустимые последовательности UTF -8. Измените настройки локали, чтобы обнаружить другие кодировки.

Кроме того,цель команды — найти недопустимых символов. Если цель состоит в том, чтобы найти настоящие символы '�', просто найдите их:

grep -oP '�' file

Или, чтобы избежать путаницы по поводу того, какой символ (в bash, ksh, zsh ), составить список совпадающих имен файлов:

grep -rloP $'\Ufffd'

Дополнительные подробности приведены в этом ответе

Конечно, это не исправит файлы, просто перечислит их. Чтобы действительно исправить файлы (, если это возможно ), опубликуйте пример проблемы. Двух-трех строк будет достаточно.

1
28.04.2021, 23:15

Теги

Похожие вопросы