Gibt es allgemeine Lösungen, um zu überprüfen, ob eine Datei beschädigt ist oder nicht? Beispielsweise, ob eine Videodatei fehlerhaft oder eine komprimierte Datei beschädigt ist usw.
echo "P = NP" >is-this-corrupt.txt
:)
Gibt es allgemeine Lösungen, um zu überprüfen, ob eine Datei beschädigt ist oder nicht? Beispielsweise, ob eine Videodatei fehlerhaft oder eine komprimierte Datei beschädigt ist usw.
echo "P = NP" >is-this-corrupt.txt
:)
Antworten:
Nein, es gibt keine generellen Lösungen. Die einzige Möglichkeit, zu überprüfen, ob eine Datei beschädigt ist, besteht darin, sie zu lesen. Das kann nur eine Software, die dieses Format lesen kann.
Sie können file
den Dateityp ermitteln und dann mit dem Dateityp ein geeignetes Programm zum Überprüfen der Datei auswählen. Sie könnten ein Skript wie das folgende schreiben:
# /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
Aber Sie müssten eine Menge Arbeit aufbringen, um die Fallaussage auszufüllen.
Es ist möglich, dass jemand bereits ein solches Skript (oder Programm) geschrieben hat, aber ich kenne keine.
grep
, cat
, tar
...). Ihre Lösung ist daher sehr aufgebläht.
cat
keinem anderen Programm, das eine Datei lediglich als unstrukturierten Bytestrom behandelt, können Sie nach Beschädigungen suchen. Ich glaube nicht, dass meine Lösung aufgebläht ist.
Wenn Sie zu einem bestimmten Zeitpunkt wissen, dass die Datei fehlerfrei ist, können Sie eine Prüfsumme daraus erstellen und diese später zum Vergleichen verwenden, um sicherzustellen, dass sie noch vollständig ist. Dies ist nützlich, bevor Sie Dateien zwischen Medien oder über Netzwerke übertragen.
Wenn Sie nicht über den ordnungsgemäßen Zustand einer Datei informiert sind, gibt es keinen universellen Weg oder keine Überprüfung auf Beschädigung. Nur das jeweilige Dateiformat bestimmt, welche Daten fehlerhaft oder nicht fehlerhaft sind.
Wenn Sie ZFS verwenden, können Sie entweder die Datei lesen und sie wird garantiert nicht beschädigt, oder Sie haben einen Lesefehler und das ist der Fall.
Nach den weisen Kommentaren ist hier eine Klarstellung meiner Antwort:
ZFS kann vor unbeaufsichtigter Datenbeschädigung schützen und diese erkennen. Beispiel: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Wenn die Datei zum Zeitpunkt des ersten Schreibens bereits beschädigt ist, gibt es natürlich nichts das Dateisystem kann.
Zum Schutz vor Beschädigung, die während der Übertragung der Datei auftreten würde, sind md5sum oder ähnliche Hashes die üblichen Allzwecktechniken.