Чи є якісь загальні рішення, щоб перевірити, чи файл пошкоджений чи ні? Наприклад, поганий файл відео чи пошкоджений стислий файл тощо.
echo "P = NP" >is-this-corrupt.txt
:)
Чи є якісь загальні рішення, щоб перевірити, чи файл пошкоджений чи ні? Наприклад, поганий файл відео чи пошкоджений стислий файл тощо.
echo "P = NP" >is-this-corrupt.txt
:)
Відповіді:
Ні, загальних рішень немає. Єдиний спосіб перевірити, чи файл пошкоджений - це спробувати і прочитати його; Тільки програмне забезпечення, яке вміє читати саме цей формат, може це зробити.
Що ви можете зробити, це використовувати 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
Але вам доведеться зробити багато роботи, щоб заповнити заяву справи.
Можливо, хтось уже написав такий сценарій (або програму), але я не знаю жодного.
grep
, cat
, tar
...). Тому ваше рішення дуже роздуте.
cat
будь-яку іншу програму, яка розглядає файл виключно як неструктурований потік байтів, щоб перевірити наявність корупції. Я не вірю, що моє рішення роздуте.
Якщо ви в якийсь момент знаєте, що файл хороший, ви можете зробити контрольну суму з нього і використовувати його для порівняння пізніше, щоб переконатися, що він все ще цілий. Це корисно перед передачею файлів між засобами масової інформації або між мережами.
Якщо ви не знаєте про хороший стан файлу, не існує універсального способу або перевірки на наявність корупції. Лише конкретний формат файлу у кожному конкретному випадку визначає, що є пошкодженими чи не пошкодженими даними.
Якщо ви випадково використовуєте ZFS, ви можете прочитати файл, і він гарантовано не буде пошкоджений, або ви отримали помилку читання, і це так.
Редагувати Після розумних коментарів, ось роз'яснення моєї відповіді:
ZFS може захищати та виявляти від мовчазної корупції даних. наприклад: http://www.zdnet.com/blog/storage/data-corrup-is-worse-than-you-know/191 Звичайно, якщо файл уже пошкоджений під час його первинного запису, нічого немає файлова система може це зробити.
Для захисту від корупції, яка сталася б під час передачі файлу, звичайними методами загального призначення є md5sum або подібні хеші.