Поиск файлов по кодировке символов

У меня длинный сценарий python, который не смог декодировать файл utf-8. Сообщение об ошибке не сообщает мне, с каким файлом он сбой, только то, что он не может декодировать байт 0x81 в позиции 194 . Я знаю, в какую папку находится файл, но не где среди тысяч файлов где-то в этом поддереве. Каковы мои варианты поиска этого файла (и тому подобное)? Есть ли в этом хорошем однострочном лайнере?

Изменение сценария для печати того, что он ищет и повторного воспроизведения, фиксируя один файл за раз, едва ли вариант, так как запуск скрипта занимает много часов. Написание трассировки каталога в Python кажется слишком большой работой.

2 Solutions collect form web for “Поиск файлов по кодировке символов”

Чтобы создать аналогичный файл с ошибкой, мы можем использовать этот скрипт:

 { printf '%*s' "179"; printf '\x81'; printf '%*s' "20"; } >infile 

Затем эта команда будет печатать, в какой позиции файл выходит из строя:

 $ isutf8 infile infile: line 1, char 1, byte offset 180: invalid UTF-8 code 

Таким образом, это проверит все файлы python ( .py ) в pwd для недопустимого кода в позиции 180:

 $ isutf8 ./*.py | grep "offset 180" 

Или даже более гибкий, диапазон смещений (расширенное регулярное выражение gnu):

 $ isutf8 ./*.py | grep -E "offset (17|18)" 

Или конкретный тест для файлов внутри всего каталога:

 $ find . -iname "*.py" -type f -exec bash -c 'isutf8 "$1" | grep -E "offset (17|18)"' Find {} \; 

Использование isutf8 из пакета moreutils :

 find . -name '*.py' -exec isutf8 {} + 

Или:

 find . -name '*.py' | xargs isutf8 

(Latter в предположении, что имена файлов не имеют новых строк.)

  • Требуется специальная проверка сценария оболочки
  • Какой процесс / программа создает / записывает файл, к которому перенаправляется ввод-вывод?
  • В чем разница между * и *. * При копировании?
  • поместите строки чисел в столбец со сценарием оболочки
  • Почему массив пуст после цикла while?
  • Каким образом можно фильтровать текстовый файл для удаления пустых строк?
  • zsh не работает при завершении пути, когда команда vim
  • Вызов скрипта с sudo игнорирует shebang
  • Я случайно вышел из vim с: x! ~, И теперь моя ~ появляется по другому пути
  • Сценарий с ошибкой «команда не найдена: ^ M»
  • Скрипты `rm` и` rm -i`
  • Linux и Unix - лучшая ОС в мире.