Як перевірити, пошкоджений чи ні файл?


13

Чи є якісь загальні рішення, щоб перевірити, чи файл пошкоджений чи ні? Наприклад, поганий файл відео чи пошкоджений стислий файл тощо.


1
Ви запитуєте, чи є фізична помилка на диску чи інформація у файлі невірна?
Thorbjørn Ravn Andersen

2
Перевірити правильність інформації у довільному файлі досить складно. echo "P = NP" >is-this-corrupt.txt:)
Том Андерсон

Відповіді:


10

Ні, загальних рішень немає. Єдиний спосіб перевірити, чи файл пошкоджений - це спробувати і прочитати його; Тільки програмне забезпечення, яке вміє читати саме цей формат, може це зробити.

Що ви можете зробити, це використовувати fileдля визначення типу файлу, а потім використовуйте тип, щоб вибрати відповідну програму для перевірки файлу. Ви можете написати такий сценарій:

# /bin/bash -eu

FILENAME=$1

FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
    "gzip compressed data") CHECKER="gunzip -t" ;;
    # many, many more lines here
    *) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac

$CHECKER $FILENAME

Але вам доведеться зробити багато роботи, щоб заповнити заяву справи.

Можливо, хтось уже написав такий сценарій (або програму), але я не знаю жодного.


1
"Тільки програмне забезпечення, яке вміє читати саме цей формат, може це зробити" - помилкове припущення. Існує маса програм, які не дбають про тип файлу, який ви їм надаєте. (Подумайте, наприклад grep, cat, tar...). Тому ваше рішення дуже роздуте.
rozcietrzewiacz

4
Під "читанням" я мав на увазі "інтерпретувати" - я повинен був бути більш чітким. Ви не можете використовувати catбудь-яку іншу програму, яка розглядає файл виключно як неструктурований потік байтів, щоб перевірити наявність корупції. Я не вірю, що моє рішення роздуте.
Том Андерсон

Ви можете, як запропонував Калеб, розглядати кожен файл як двійкові дані та зберігати контрольні суми для подальшої перевірки. Це універсально, просто і порівняно швидко.
rozcietrzewiacz

1
Але зараз я бачу, що ваш підхід має користь, що ви можете виконати перевірку навіть у файлах, до яких раніше не бачили та не зверталися. Це, безумовно, плюс - ви можете вказати на це у своїй відповіді.
rozcietrzewiacz

14

Якщо ви в якийсь момент знаєте, що файл хороший, ви можете зробити контрольну суму з нього і використовувати його для порівняння пізніше, щоб переконатися, що він все ще цілий. Це корисно перед передачею файлів між засобами масової інформації або між мережами.

Якщо ви не знаєте про хороший стан файлу, не існує універсального способу або перевірки на наявність корупції. Лише конкретний формат файлу у кожному конкретному випадку визначає, що є пошкодженими чи не пошкодженими даними.


3

Якщо ви випадково використовуєте ZFS, ви можете прочитати файл, і він гарантовано не буде пошкоджений, або ви отримали помилку читання, і це так.

Редагувати Після розумних коментарів, ось роз'яснення моєї відповіді:

ZFS може захищати та виявляти від мовчазної корупції даних. наприклад: http://www.zdnet.com/blog/storage/data-corrup-is-worse-than-you-know/191 Звичайно, якщо файл уже пошкоджений під час його первинного запису, нічого немає файлова система може це зробити.

Для захисту від корупції, яка сталася б під час передачі файлу, звичайними методами загального призначення є md5sum або подібні хеші.


вау, яка особливість: O
LanceBaynes

1
Тож якщо ви завантажите відео з Інтернету, корумповане? ZFS нічого не допомагає вам там - він просто підтверджує, що пошкоджений файл не змінюється. ZFS є фантастичним, але це не рішення для перевірки пошкоджених файлів.
Том Андерсон

На жаль, це лише перевірка цілісності файлової системи, а не власне розуміння файлів та їх пошкодження. Найбільш поширене використання, яке я підозрюю, @Lance - це після того, як він може вирішити, чи вхідний файл, завантажений або переданий іншим чином, дійсний чи ні. ZFS не може магічно вирішити, чи файл хороший чи ні, лише пообіцяйте, що все, що ви надаєте, буде збережено і повернене в одному фрагменті локально.
Калеб

Оскільки питання позначено тегами / відновлення даних та / файлових систем, я припускав, що мова йде про спокійну корупцію даних, а не про файли, які вже були зламані в першу чергу. Відповідь відредаговано для уточнення цього пункту.
jlliagre

@jiliagre: я поставив це питання за допомогою тегу (можливо, неправильно) приблизно через годину після вашої відповіді. Коли ви відповіли на це, його просто позначали "linux".
Калеб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.