Как обнаружить поврежденные файлы?

Как обнаружить поврежденные файлы?

У меня есть много файлов, MP4, Mp3, Exe и других, которые во время резервного копирования не были правильно скопированы на жесткий диск по какой-то причине. Я проверил содержимое файлов с помощью шестнадцатеричного редактора и обнаружил, что многие из поврежденных файлов имеют заполненные области 00 там, где должны быть данные, а некоторые из них имеют случайные данные там, где должны быть функциональные данные. По крайней мере, для заполненных 00 файлов должен быть способ поиска всех этих и их определения. Я попробовал инструмент поиска Windows (Windows 8.1) и включил поиск содержимого файлов, однако, поскольку в поиске Windows нет возможности искать в шестнадцатеричном формате, я искал точку ASCII ....., которая представляет 00 Hex. Я скопировал правильный .... из шестнадцатеричного редактора и вставил его в поиск, это не сработало.

Я хотел бы найти все файлы, которые имеют большое количество шестнадцатеричных заполнений 00, но не знаю, как это сделать, любые советы были бы признательны. Спасибо.

решение1

TheДвоичный просмотрщикВ программе есть функция, которая позволит вам искать шестнадцатеричные последовательности и двоичные шаблоны в заданных каталогах (или вы можете указать root для всей вашей машины).

Еще одно возможное решение — программно просмотреть все ваши файлы и выбрать те, в которых число значений «00» выше ожидаемого (т. е. те, в которых среднее число «00» велико). Для этого вам понадобится язык программирования. Поскольку я статистик, мне нравится этот Rязык программирования, потому что:

  1. Это бесплатно; и
  2. Его относительно легко выучить.

В R, вы можете проверить «шестнадцатеричные» значения файла (я предполагаю, что вы просматриваете шестнадцатеричные значения размером 1 байт) с помощью следующего Rкода:

install.packages("DescTools")
library(DescTools)
myBinary="D:/temp/2.jpg"

myhex = readRaw(myBinary)
#View first 20 entries
head(myhex$fileRaw, n=20)
 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00

Теперь вы можете узнать среднее количество записей «00»:

#Find the mean number of times a "00" entry appears in this file
mean(myhex$fileRaw=="00")
 0.008298835

Все, что вам нужно сделать, это поместить простую циклическую структуру вокруг этого кода, чтобы перебрать все файлы в каталоге и вывести среднее число записей "00". Вы можете пойти еще дальше и "обучить" оптимальную наивную среднюю точку отсечения, запустив этот алгоритм через кучуизвестенхорошие (т.е. неповрежденные) файлы и вычисление среднего значения записей "00" в файлах там (т.е. среднее значение средних). Вы, вероятно, могли бы вычислить типичный доверительный интервал вокруг этого и, вероятно, использовать верхний предел доверительного интервала в качестве точки отсечения для подачи в вашу программу для поиска файловнеизвестныйКоррупция. Это поможет вам отсеять тех, кто коррумпирован.

Связанный контент