Как проверить 500 000 файлов word,exel,pdf ,txt что они не битые?

Немного сумбурно излагаю, но возникла задача глупая.

Есть файлопомойка, много много файлов огромное дерево каталогов со сложной иерахией, куда юзеры пишут файло лет 10 наверное.
В принципе бекапы файлов есть, все работает.
Где-то всего там лежит гигов 500 всякого.
---
Тут произошел инцидент на днях, пользователь скопировал одну папку саму в себя.
Винда честно ругнулась что все сломает, юзер честно сказал - ломай.
Соотвественно от файлов остались название и нечитаемое содержимое, файл читается но там абракодабра.
Я как обычно когда ломается, из бекапа вытащил эту папку ничего не потерялось, но заставило сильно призадумался.
Заела меня паранойя.
---
Всегда проверяли выборочно архив путем развертывания и проверки что файлы есть и читаются.
Естественно выборочно, так как 500000 файлов никто проверить в здравом уме не сможет.
---
Но в данном случае если юзер ничего не скажет, а файло уйдет в архив и условно через полгода, в архивах останутся только битые файлы в какой-то папке которую не заметили и пропустили.
---
Как бы придумать как проверять файлы именно на читаемость содержимого в автомате, чтоб скажем раз в месяц прогонять копию, чтобы проверить открываются эти файлы или нет.
  • Вопрос задан
  • 4106 просмотров
Решения вопроса 3
Zettabyte
@Zettabyte
Проф. восстановление данных ▪ Вопрос? См. профиль
"Новые" офисные форматы (.docx, .xlsx, ...) - это по факту zip-архивы.

Новый (пустой) документ Excel распакуется в виде, ЕМНИП, шести папок и примерно десятка файлов.

Соответственно, их целостность можно проверить с помощью 7-Zip.

Но с .pdf такой фокус не пройдёт.

Текстовые файлы можно проверить с помощью анализа энтропии. Но тут вам потребуется понимание этого дела и, с определённой вероятностью, базовое умение программировать.

Анализаторы энтропии встроены в некоторые инструменты для data recovery, но они работают немного по-другому и с накопителями в целом.
Утилиты для отдельных файлов я сходу не назову, хотя почти уверен, что она должна существовать. Поищите в составе инструментов для forensic в духе Kali Linux и подобного.
Также посмотрите что используют те, кто анализируют прошивки, дампы чипов, и занимаются подобным реверс-инжинирингом.

Когда мне несколько лет назад потребовалась схожая программа, отображающая энтропию, я подходящего ничего не нашёл, в итоге писал не самый прямой костыль сам.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Я-бы поделил файлы word,exel,pdf ,txt на группы.

1) Aрхивы docx, xlsx. Как выше заметил один джентльмен их можно проверить любой
утилитой которая умеет читать zip и делать zip -t (test) с выводом статуса в errorlevel.
Автоматизировать можно либо bash либо python скриптом.

Если архив целый (контрольные суммы совпали) то и документ почти 100% не поврежден.

2) Офисные документы старого формата (doc/xls). Здесь я-бы парсил их через apache POI
(это java библиотека). Это разработка. Но простая. На 1 story point. Я думаю
любой первокурсник напишет.

3) Adobe документы. Масса вариантов. Есть автоматизация с помощью bash/python
и консольными тулзами. Я перечислю тулзы которые есть под линукс и которые читают
pdf.

- pdfimages
- pdfextract
- pdftoppm

Напомню что почти все они должны в случае неуспеха генерировать статус код не нулевой.
Это будет критерий проверки.

4) Прочие текстовые документы. Неструктурированные. Я тут честно не знаю как их проверять.
Но допустим если они содержат текст в кодировке win-1251 то любой криптохакер
с cryptohack вам быстро напишет скриптик
для проверки что гистограмма или биграмма
соотвествует примерно тексту и национальным признакам. Если файл будет в нулях
или в рандомном шуме то какой-то критерий не сработает. Здесь надо подумать
и просто глазами посмотреть на эти документы. Возможно большая часть из них
это бланки - и тогда надо чекать наличие просто каких-то шаблонов.
Ответ написан
@rPman
Макросы msword, их даже с нуля писать не придется, так как там есть механизм записи макроса - запускаешь запись, делаешь какие то действия, останавливаешь - он показывает сгенерированный код макроса, выполняющий эти действия, добавляешь в код проверки на ошибку, заворачиваешь в цикл и готово - код простейший - взять следующее имя файла из списка, открыть файл, проверить на ошибку, закрыть файл, повторять до окончания списка.

Так же можно делать все то же самое из любого другого языка программирования, я помню делал что то похожее на c# в visual studio, это удобнее чем писать на vbscript.
https://learn.microsoft.com/ru-ru/dotnet/csharp/ad...
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@kisskin
у doc/xls есть стандартный заголовок. Его наличие не гарантирует, что остальное целое, но с вероятностью 1E+12
гарантирует что там был офисный документ.

у pdf тоже есть и заговолок и маркер конца.

Тектстовые файлы проверять на попадание в диапазон текстовых и т.п. символов. Либо на отсутствие непечатных символов. Можно регистры текста проверять, но тут будет немало ложных срабатываний.

Такие варианты проверок будут самыми быстрыми, но софт придется самому делать, хотя тут делов на один вечер.
Ответ написан
@swoopspb
Самый простой и универсальный для всех типов файлов способ - ежедневно/еженедельно сверять контрольную сумму и сигнализировать если она изменилась.
Ещё можно играться с архивным атрибутом файлов.
Всё это гораздо менее ресурсозатратно чем тестировать каждый документ архиватором.
Да, на абракадабру не проверит, но это можно сделать вторым этапом
Ответ написан
opium
@opium
Просто люблю качественно работать
Нет смысла возиться, сделай слепок текущий рабочий и забейте, если надо вернётесь к нему он никуда не денется
Ответ написан
Комментировать
bejoy
@bejoy
Вдогонку методам проверки текстовых файлов, как уже говорили присутвующие, простой способ - узнать, если ли в тексте нечитаемые или системные символы, кроме часто используемых в тексте, типа пробела или переноса строки. Большое их количество по отношению к размеру будет явным критерием повреждения осмысленного текста.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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