Uji integritas file tar di bash

25

Saya memiliki skrip bash yang membuat file '.tar'. Setelah file dibuat, saya ingin menguji integritasnya dan mengirim email ke pengguna root jika integritasnya buruk.

Saya tahu saya perlu menggunakan perintah tar -tf /root/archive.taruntuk memeriksa integritas file, tetapi bagaimana saya mengimplementasikan ini dalam bash jika pernyataan dan memeriksa kesalahan?

Chris
sumber

Jawaban:

33

Jika tarmenemukan kesalahan dalam inputnya, ia akan exit(3)¹ dengan nilai keluar yang tidak nol. Ini - dengan sebagian besar tarimplementasi - juga dilakukan saat mendaftar konten arsip t. Jadi, Anda cukup memeriksa nilai keluar taruntuk menentukan apakah ada masalah:

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

Jika Anda tartidak menemukan semua kesalahan dengan t, Anda masih bisa mengekstrak arsip untuk stdoutdan redirect stdoutke /dev/null, yang akan menjadi lebih lambat tapi lebih dapat diandalkan pendekatan:

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

¹ Notasi ini menunjukkan halaman manual, bukan panggilan yang sebenarnya. Lihat man 3 exit.

Andreas Wiese
sumber
1
Anda mungkin ingin mengarahkan taroutput ke /dev/null, karena Anda mungkin tidak benar-benar ingin melihatnya.
Kevin
1
Tidak semua tarimplementasi mendeteksi atau melaporkan semua kesalahan dengan t( bsdtartidak, Anda dapat menggunakannya di tar xOf file.tar > /dev/nullsana). Tidak semua tarimplementasi akan keluar dengan status keluar 2, star(255) ot bsdtar(1) tidak, tetapi yang penting adalah bahwa status keluar tidak nol di sini.
Stéphane Chazelas
1
Saya mengedit posting saya sesuai. Dengan exit(2)saya memperhatikan halaman manual yang sesuai, bukan nilai keluar yang tepat (itulah sebabnya saya »non-nol« secara eksplisit disebutkan dalam kalimat berikut). Beranotasi ini (dan mengubah bagian ke kanan -.-).
Andreas Wiese
jawaban Anda hanya tentang kemampuan daftar dan ekstraksi, jika saya membuka arsip tar dengan editor dan mengubah sesuatu, solusi Anda tidak akan menemukan kesalahan apa pun ... maaf
PENULIS
0

maaf, tetapi Anda tidak bisa, sepertinya tar tidak memiliki kemampuan pengujian (misalnya jika Anda lupa tentang * nix dan mencoba mengujinya dengan winrar, hasilnya adalah: "Perintah tidak didukung untuk jenis arsip ini")

bagaimana saya tunjukkan dalam komentar di atas, tar benar-benar tidak memiliki CRC internal untuk memiliki istilah perbandingan, oleh karena itu jika Anda mengubah arsip tar dengan editor, daftar dan ekstraksi dapat bekerja tanpa cacat tanpa kesalahan, tetapi mengekstrak data yang rusak

Kesimpulannya, saya akhirnya di sini berharap untuk solusi, tetapi tidak ada satu, untungnya ada dua kabar baik:

ada arsip tar yang sangat, sangat, sangat langka yang tidak juga dikompres dengan program lain (seperti gzip, bzip2, dll.) oleh karena itu program itu akan memiliki solusi pengujian dan orang-orang yang tidak mengompresnya agak timpang, BENAR-BENAR Lame

untuk masalah pribadi saya, saya beruntung, setelah mengekstraknya, saya baru saja menemukan file md5sum dengan CRC dari semua file di dalamnya (bahkan orang yang meletakkan tar arhive di internet dan tidak ingin mengompresnya, ia masih ingin menjadi dapat diverifikasi)

Sang penyihir
sumber
-5

Anda dapat melakukannya dengan meneruskan argumen berikut ke tar:

$ tar -cvzf test.tar test_file
sudeepta roy
sumber
2
Jawaban satu baris sering kali tidak terlalu membantu. Pertimbangkan memperluas posting Anda untuk memasukkan beberapa bahan sumber (misalnya, dokumentasi) yang mendukung solusi Anda.
HalosGhost
6
-cmembuat file bernama via -f('test.tar'). -zgzip arsip. -vmembuatnya verbose. Saya cukup yakin ini bukan solusi yang akurat.
EpicVoyage