Eu tenho um script bash que cria um arquivo '.tar'. Depois que o arquivo é criado, eu gostaria de testar sua integridade e enviar um email ao usuário root se a integridade estiver ruim.
Eu sei que precisaria usar o comando tar -tf /root/archive.tar
para verificar a integridade do arquivo, mas como implementaria isso em uma declaração bash if e verificaria se há erros?
tar
saída para/dev/null
, pois provavelmente não deseja vê-la.tar
implementações detectam ou relatam todos os erros comt
(bsdtar
não, você pode usartar xOf file.tar > /dev/null
lá). Nem todas astar
implementações sairiam com o status de saída 2,star
(255) oubsdtar
(1) não, mas o que importa é que o status de saída é diferente de zero aqui.exit(2)
eu estava relacionado à página de manual apropriada, não ao valor exato de saída (é por isso que eu tinha mencionado "diferente de zero" explicitamente na frase a seguir). Anotou isso (e alterou a seção para a direita -.-).desculpe, mas você não pode, parece que o tar não possui a capacidade de testar (por exemplo, se você esquecer o * nix e tentar testá-lo com o winrar, o resultado será: "O comando não é suportado para esse tipo de arquivo")
Como mencionei nos comentários acima, o tar literalmente carece de CRC interno para ter um termo de comparação; portanto, se você alterar um arquivo tar com um editor, a listagem e a extração podem funcionar perfeitamente sem erros, mas extraem dados corrompidos
em conclusão, acabo aqui esperando uma solução, mas não há uma, felizmente existem duas boas notícias:
existem arquivos tar muito, muito, muito raros que também não são compactados com outro programa (como gzip, bzip2, etc.), portanto, esse programa terá uma solução de teste e as pessoas que não os compactam são meio coxas, REALMENTE LAME
para o meu problema pessoal, tenho sorte, depois de extraí-lo, encontrei um arquivo md5sum com CRC de todos os arquivos dentro (mesmo a pessoa que colocou o tar de arhive na rede e não queria compactá-lo, ele ainda queria ser pode ser verificado)
fonte
Você pode fazer isso passando os seguintes argumentos para
tar
:fonte
-c
cria o arquivo nomeado via-f
('test.tar').-z
gzips o arquivo.-v
torna detalhado. Tenho certeza de que essa não é uma solução precisa.