Esistono soluzioni generali per verificare se un file è danneggiato o no? Ad esempio, se un file video è danneggiato o se un file compresso è danneggiato, ecc.
echo "P = NP" >is-this-corrupt.txt
:)
Esistono soluzioni generali per verificare se un file è danneggiato o no? Ad esempio, se un file video è danneggiato o se un file compresso è danneggiato, ecc.
echo "P = NP" >is-this-corrupt.txt
:)
Risposte:
No, non ci sono soluzioni generali. L'unico modo per verificare se un file è corrotto è provare a leggerlo; solo il software che sa leggere quel particolare formato può farlo.
Quello che potresti fare è usare file
per identificare il tipo di file e quindi usare il tipo per scegliere un programma appropriato per controllare il file. Puoi scrivere una sceneggiatura come questa:
# /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
Ma avresti molto lavoro da fare per compilare la dichiarazione del caso.
È possibile che qualcuno abbia già scritto un tale script (o programma), ma non ne conosco nessuno.
grep
, cat
, tar
...). La tua soluzione è quindi molto gonfia.
cat
o qualsiasi altro programma che tratta un file puramente come un flusso non strutturato di byte, per verificare la corruzione. Non credo che la mia soluzione sia gonfia.
Se a un certo punto sai che il file è buono, puoi fare un checksum e usarlo per confrontarlo in seguito per assicurarti che sia ancora intero. Ciò è utile prima di trasferire file tra supporti o tra reti.
Se non si conosce il buono stato di un file, no non esiste un modo universale o verificare la corruzione. Solo il formato di file specifico in ciascun caso determina quali sono i dati corrotti o meno.
Se ti capita di usare ZFS, o puoi leggere il file ed è garantito che non sia danneggiato o hai un errore di lettura e lo è.
Modifica Dopo i saggi commenti, ecco un chiarimento della mia risposta:
ZFS può proteggere e rilevare dalla corruzione silenziosa dei dati. ad es .: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Naturalmente se il file è già corrotto al momento della sua scrittura iniziale, non c'è nulla il file system può fare.
Per proteggere dalla corruzione che potrebbe verificarsi durante la trasmissione del file, le solite tecniche di uso generale sono md5sum o hash simili.