Czy istnieją jakieś ogólne rozwiązania pozwalające sprawdzić, czy plik jest uszkodzony? Na przykład, czy plik wideo jest zły, czy plik skompresowany jest uszkodzony itp.
echo "P = NP" >is-this-corrupt.txt
:)
Czy istnieją jakieś ogólne rozwiązania pozwalające sprawdzić, czy plik jest uszkodzony? Na przykład, czy plik wideo jest zły, czy plik skompresowany jest uszkodzony itp.
echo "P = NP" >is-this-corrupt.txt
:)
Odpowiedzi:
Nie, nie ma żadnych ogólnych rozwiązań. Jedynym sposobem sprawdzenia, czy plik jest uszkodzony, jest próba jego odczytania; tylko oprogramowanie potrafiące odczytać ten konkretny format może to zrobić.
Możesz użyć, file
aby zidentyfikować typ pliku, a następnie użyj tego typu, aby wybrać odpowiedni program do sprawdzenia pliku. Możesz napisać taki skrypt:
# /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
Ale musisz wypełnić dużo pracy, aby wypełnić opis sprawy.
Możliwe, że ktoś już napisał taki skrypt (lub program), ale nie znam żadnego.
grep
, cat
, tar
...). Twoje rozwiązanie jest zatem bardzo rozdęte.
cat
ani żadnego innego programu, który traktuje plik wyłącznie jako nieustrukturyzowany strumień bajtów, w celu sprawdzenia jego uszkodzenia. Nie wierzę, że moje rozwiązanie jest rozdęte.
Jeśli wiesz, że w pewnym momencie plik jest dobry, możesz zrobić sumę kontrolną i użyć go do późniejszego porównania, aby upewnić się, że nadal jest cały. Jest to przydatne przed przesłaniem plików między mediami lub między sieciami.
Jeśli nie wiesz o dobrym stanie pliku, nie ma uniwersalnego sposobu lub sprawdzania, czy nie ma uszkodzeń. Tylko określony format pliku w każdym przypadku określa, które dane są uszkodzone lub nie.
Jeśli zdarzy ci się korzystać z ZFS, możesz odczytać plik i na pewno nie zostanie on uszkodzony lub wystąpił błąd odczytu i tak jest.
Edytuj Po mądrych komentarzach, oto wyjaśnienie mojej odpowiedzi:
ZFS może chronić i wykrywać przed cichym uszkodzeniem danych. np .: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Oczywiście, jeśli plik jest już uszkodzony w momencie jego początkowego zapisu, nic nie ma system plików może to zrobić.
Aby zabezpieczyć się przed uszkodzeniem, które nastąpiłoby podczas przesyłania pliku, zwykle stosuje się techniki ogólnego przeznaczenia md5sum lub podobne wartości skrótu.