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

У меня длинный сценарий 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 в предположении, что имена файлов не имеют новых строк.)

  • Создание копий каталогов с помощью find
  • Как заставить xargs обрабатывать пробелы и специальные символы из кошки?
  • Изменение переменных в разветвленном процессе извне этой вилки?
  • Как удалить значения $ VAR2 из $ VAR1 и вывести оставшиеся значения в $ VAR3?
  • Сортировка вывода «find»?
  • поиск содержимого файлов, упакованных в zip-файл
  • Переименуйте файлы (удалите некоторые символы, которые не всегда одинаковы)
  • Разделить файл на основе шаблона с ведущими нулями
  • Как узнать, существует ли каталог?
  • Как отображать «доступные для человека» размеры файлов в результатах поиска?
  • Как создать загрузочную флешку для «efi-shell»
  • Linux и Unix - лучшая ОС в мире.