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

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

  • Когда начался скрипт?
  • Вывод различных строк при сравнении двух файлов
  • Удаление всех изображений, сделанных с помощью конкретной камеры.
  • Как извлечь одну папку из большого архива tar.gz?
  • Как написать сценарий оболочки, чтобы при компиляции моей программы на C ++ он поместил двоичный код в двоичный каталог
  • Команда Scrot - как сохранить только миниатюру
  • Выполнение сценария оболочки на нескольких серверах
  • Как выбрать ответ для интерактивной подсказки при установке из сценария оболочки
  • Может ли команда в конвейере оболочки определять tty-характеристики своего контекста?
  • Как выполнить инструкцию IF из результата выполненной команды
  • Как считать события фразы в grep, игнорируя случай?
  • Запустите сценарий оболочки через символическую ссылку из каталога, содержащего сам сценарий
  • Linux и Unix - лучшая ОС в мире.