Existe-t-il des solutions générales pour vérifier si un fichier est corrompu ou non? Par exemple, si un fichier vidéo est mauvais ou si un fichier compressé est corrompu, etc.
echo "P = NP" >is-this-corrupt.txt
:)
Existe-t-il des solutions générales pour vérifier si un fichier est corrompu ou non? Par exemple, si un fichier vidéo est mauvais ou si un fichier compressé est corrompu, etc.
echo "P = NP" >is-this-corrupt.txt
:)
Réponses:
Non, il n'y a pas de solutions générales. La seule façon de vérifier si un fichier est corrompu est d'essayer de le lire; seuls les logiciels qui savent lire ce format particulier peuvent le faire.
Ce que vous pourriez faire, c'est utiliser file
pour identifier le type du fichier, puis utiliser le type pour choisir un programme approprié pour vérifier le fichier. Vous pouvez écrire un script comme celui-ci:
# /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
Mais vous auriez beaucoup de travail à faire pour remplir l'énoncé de cas.
Il est possible que quelqu'un ait déjà écrit un tel script (ou programme), mais je n'en connais aucun.
grep
, cat
, tar
...). Votre solution est donc très gonflée.
cat
, ni aucun autre programme qui traite un fichier uniquement comme un flux d'octets non structuré, pour vérifier la corruption. Je ne crois pas que ma solution soit gonflée.
Si vous savez à un moment donné que le fichier est bon, vous pouvez en faire une somme de contrôle et l'utiliser pour comparer plus tard afin de vous assurer qu'il est toujours entier. Ceci est utile avant de transférer des fichiers entre supports ou entre réseaux.
Si vous ne connaissez pas le bon état d'un fichier, non, il n'y a pas de moyen universel ou de vérification de la corruption. Seul le format de fichier spécifique dans chaque cas détermine ce qui est corrompu ou non corrompu.
Si vous utilisez ZFS, soit vous pouvez lire le fichier et il est garanti qu'il n'est pas corrompu, soit vous avez une erreur de lecture et c'est le cas.
Modifier Après les sages commentaires, voici une clarification de ma réponse:
ZFS peut protéger et détecter contre la corruption silencieuse des données. par exemple: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Bien sûr, si le fichier est déjà corrompu au moment où il est initialement écrit, il n'y a rien le système de fichiers peut faire.
Pour se protéger contre la corruption qui se produirait lors de la transmission du fichier, les techniques d'usage général habituelles sont md5sum ou hachages similaires.