Outras dicas

Você provavelmente poderia usar a opção -t gzip para testar a integridade de arquivos

http://linux.about.com/od/commands/l/ blcmdl1_gzip.htm

De: http://unix.ittoolbox.com/groups/technical-functional/shellscript-l/how-to-test-file-integrity-of-targz-1138880

Para testar o arquivo gzip não está corrompido:

gunzip -t file.tar.gz

Para testar o interior arquivo tar não está corrompido:

gunzip -c file.tar.gz | tar t > /dev/null

Como parte do backup que você poderia provavelmente apenas executar o último comando e verificar o valor de US $? depois para um valor 0 (sucesso). Se quer o alcatrão ou o gzip tem um problema, $? terá um valor diferente de zero.

Se você quer fazer um extrato verdadeiro teste de um arquivo tar sem extrair para o disco, use a opção -O. Este vomita o extrato para a saída padrão em vez do sistema de arquivos. Se o arquivo tar é corrupto, o processo irá abortar com um erro.

Exemplo de teste bola tar falhou ...

$ echo "this will not pass the test" > hello.tgz
$ tar -xvzf hello.tgz -O > /dev/null
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors
$ rm hello.*

Exemplo de Trabalho ...

$ ls hello*
ls: hello*: No such file or directory
$ echo "hello1" > hello1.txt
$ echo "hello2" > hello2.txt
$ tar -cvzf hello.tgz hello[12].txt
hello1.txt
hello2.txt
$ rm hello[12].txt
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz -O
hello1.txt
hello1
hello2.txt
hello2
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz
hello1.txt
hello2.txt
$ ls hello*
hello1.txt  hello2.txt  hello.tgz
$ rm hello*

Você também pode verificar o conteúdo do arquivo .tag.gz * usando pigz (gzip paralelo) para acelerar a verificação de arquivo:

pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null

Eu tentei o seguinte comando e eles funcionam bem.

bzip2 -t file.bz2
gunzip -t file.gz

No entanto, podemos encontrar estes dois comandos são demorados. Talvez precisamos de alguma maneira mais rápida para determinar a intacta dos arquivos compressa.

Uma boa opção é usar tar -tvvf <filePath> que adiciona uma linha que informa o tipo de arquivo.

Exemplo em um arquivo .tar válido:

> tar -tvvf filename.tar 
drwxr-xr-x  0 diegoreymendez staff       0 Jul 31 12:46 ./testfolder2/
-rw-r--r--  0 diegoreymendez staff      82 Jul 31 12:46 ./testfolder2/._.DS_Store
-rw-r--r--  0 diegoreymendez staff    6148 Jul 31 12:46 ./testfolder2/.DS_Store
drwxr-xr-x  0 diegoreymendez staff       0 Jul 31 12:42 ./testfolder2/testfolder/
-rw-r--r--  0 diegoreymendez staff      82 Jul 31 12:42 ./testfolder2/testfolder/._.DS_Store
-rw-r--r--  0 diegoreymendez staff    6148 Jul 31 12:42 ./testfolder2/testfolder/.DS_Store
-rw-r--r--  0 diegoreymendez staff  325377 Jul  5 09:50 ./testfolder2/testfolder/Scala.pages
Archive Format: POSIX ustar format,  Compression: none

.tar corrompido:

> tar -tvvf corrupted.tar 
tar: Unrecognized archive format
Archive Format: (null),  Compression: none
tar: Error exit delayed from previous errors.

Estas são todas as soluções muito sub-óptimos. Do GZIP especificação

ID2 (identificação 2)
Estes têm os valores fixos ID1 = 31 (0x1F, \ 037), ID2 = 139 (0x8B, \ 213), para identificar o arquivo como estando em formato gzip.

tem de ser codificado em qualquer linguagem que você está usando.

> utilizar a opção -O. [...] Se o arquivo tar é corrupto, o processo irá abortar com um erro.

Às vezes sim, mas às vezes não. Vamos ver um exemplo de um arquivo corrompido:

echo Pete > my_name
tar -cf my_data.tar my_name 

# // Simulate a corruption
sed < my_data.tar 's/Pete/Fool/' > my_data_now.tar
# // "my_data_now.tar" is the corrupted file

tar -xvf my_data_now.tar -O

Ele mostra:

my_name
Fool  

Mesmo se você executar

echo $?

tar disse que não havia erro:

0

mas o arquivo foi corrompido, tem agora "Fool" em vez de "Pete".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top