Verifica l'integrità del file tar in bash


25

Ho uno script bash che crea un file '.tar'. Una volta creato il file, vorrei verificarne l'integrità e inviare un'e-mail all'utente root se l'integrità è errata.

So che avrei bisogno di usare il comando tar -tf /root/archive.tarper verificare l'integrità del file, ma come implementarlo in una dichiarazione bash if e verificare la presenza di errori?

Risposte:


33

Se tartrova errori nel suo input, exit(3)¹ con un valore di uscita diverso da zero. Questo - con la maggior parte delle tarimplementazioni - viene fatto anche quando si elencano contenuti di archivio con t. Quindi potresti semplicemente verificare il valore di uscita di tarper determinare se qualcosa è andato storto:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

Se tarnon trovi tutti gli errori t, potresti comunque estrarre l'archivio stdoute reindirizzare stdouta /dev/null, che sarebbe l'approccio più lento ma più affidabile:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

¹ Questa notazione indica la manpage, non la chiamata effettiva. Vedere man 3 exit.


1
Probabilmente vorrai reindirizzare l' taroutput a /dev/null, poiché probabilmente non vorrai effettivamente vederlo.
Kevin,

1
Non tutte le tarimplementazioni rilevano o segnalano tutti gli errori con t( bsdtarnon è possibile utilizzarli tar xOf file.tar > /dev/null). Non tutte le tarimplementazioni uscirebbero con lo stato di uscita 2, star(255) ot bsdtar(1) no, ma ciò che conta è che lo stato di uscita sia diverso da zero qui.
Stéphane Chazelas,

1
Ho modificato il mio post di conseguenza. Per exit(2)quanto riguarda la manpage appropriata, non l'esatto valore di uscita (motivo per cui avevo "diverso da zero" esplicitamente menzionato nella frase seguente). Annotato questo (e ha cambiato la sezione in quella giusta -.-).
Andreas Wiese,

la tua risposta è solo sulla capacità di elencare ed estrarre, se apro un archivio tar con un editor e cambio qualcosa la tua soluzione non rileverà alcun tipo di errore ... scusa
THESorcerer

0

scusa, ma non puoi, sembra che tar manchi della capacità di test (ad esempio se dimentichi * nix e provi a provarlo con winrar, il risultato sarà: "Il comando non è supportato per questo tipo di archivio")

come ho sottolineato nei commenti sopra, tar manca letteralmente di CRC interno per avere un termine di confronto, quindi se si modifica un archivio tar con un editor, l'elenco e l'estrazione potrebbero funzionare senza errori, ma estrarre i dati danneggiati

in conclusione, finisco qui sperando in una soluzione, ma non ce n'è una, fortunatamente ci sono due buone notizie:

ci sono archivi tar molto, molto, MOLTO rari che non sono compressi anche con un altro programma (come gzip, bzip2, ecc.), quindi quel programma avrà una soluzione di test e le persone che non li comprimono sono un po 'zoppo, VERAMENTE LAME

per il mio problema personale, sono fortunato, dopo averlo estratto, ho appena trovato un file md5sum con CRC di tutti i file all'interno (anche la persona che ha messo arhive tar in rete e non voleva comprimerlo, voleva comunque essere in grado di essere verificato)


-5

Puoi farlo passando i seguenti argomenti a tar:

$ tar -cvzf test.tar test_file

2
Le risposte a una riga spesso non sono così utili. Valuta di espandere il tuo post in modo che includa del materiale di origine (ad es. Documentazione) a supporto della tua soluzione.
HalosGhost

7
-ccrea il file denominato via -f('test.tar'). -zcomprime l'archivio. -vlo rende prolisso. Sono abbastanza sicuro che questa non sia una soluzione accurata.
EpicVoyage,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.