Tarh bütünlüğünü bash olarak test et


25

Bir '.tar' dosyası oluşturan bir bash betiğim var. Dosya oluşturulduktan sonra, bütünlüğünü test etmek ve bütünlüğü kötüyse kök kullanıcıya bir e-posta göndermek istiyorum.

tar -tf /root/archive.tarDosyanın bütünlüğünü kontrol etmek için bu komutu kullanmam gerektiğini biliyorum , ancak ifade ve hataları kontrol etmek için bunu nasıl bash olarak uygularım?

Yanıtlar:


33

Eğer tarkendi girişteki bulur hataları o olacak exit(3)sıfır olmayan bir çıkış değeri ile ¹. Bu - çoğu taruygulamayla birlikte - arşiv içeriğini listelerken de yapılır t. Böylece bir tarşeyin yanlış gittiğini belirlemek için çıkış değerini kontrol edebilirsiniz :

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

Eğer senin tartüm hatalarını bulamaz t, yine de arşiv ayıklamak olabilir stdoutve yönlendirme stdoutiçin /dev/nulldaha yavaş fakat daha güvenilir bir yaklaşım olacağını,:

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

No Bu gösterim, gerçek çağrıyı değil, man sayfasını gösterir. Bakın man 3 exit.


1
Muhtemelen gerçekten görmek istemediğiniz için tarçıktıyı yönlendirmek /dev/nullisteyeceksiniz.
Kevin,

1
Tüm taruygulamalar tüm hataları algılar veya bildirmez t( orada bsdtarkullanmazsınız tar xOf file.tar > /dev/null). Bütün taruygulamalar çıkış durumu 2 ile çıkmaz, star(255) ot bsdtar(1), ancak önemli olan burada çıkış durumunun sıfır olmamasıdır.
Stéphane Chazelas,

1
Yayınlarımı buna göre düzenledim. İle exit(2)ben (ben niye »açıkça aşağıdaki cümlede belirtilen olmayan sıfır« olan) uygun man sayfasına değil, tam çıkış değeri ile ilgili oldu. Bunu açıkladı (ve bölümü sağdaki değiştirdi -.-).
Andreas Wiese

Cevabınız sadece bir editör ile katran arşivi açar ve çözümünüzün herhangi bir hatayı yakalayamayacağı bir şeyi değiştirirsem, listeleme ve çıkarma yeteneği ile ilgilidir ... üzgünüm
THESorcerer

0

üzgünüm ama yapamazsın, tar test etme kabiliyetine sahip değil gibi görünüyor (örneğin * nix'i unutursanız ve winrar ile test etmeye çalışırsanız, sonuç şöyle olacaktır: "Bu tür arşiv için komut desteklenmiyor")

Yukarıdaki yorumlarda nasıl belirttiğim gibi, tar kelimenin tam anlamıyla dahili CRC’de bir karşılaştırma süresine sahip değildir, bu nedenle bir editörle bir tar arşivini değiştirirseniz, listeleme ve çıkartma hatasız bir şekilde çalışabilir, ancak bozuk veri çıkarabilir

Sonuç olarak, bir çözüm için umutla geliyorum ama bir tane yok, neyse ki iki iyi haber var:

başka bir programla (gzip, bzip2 vb.) sıkıştırılmamış çok, çok, çok nadir katran arşivleri de var, bu nedenle programın bir test çözümü olacak ve bunları sıkıştıracak insanlar gerçekten GERÇEKTEN LAME

kişisel sorunum için şanslıyım, çıkardıktan sonra, içinde tüm dosyaların CRC'sini içeren bir md5sum dosyası buldum (net arhive katranı ekleyen ve sıkıştırmak istemeyen kişi bile, hala olmak istiyordu) doğrulanabiliyor)


-5

Bunu aşağıdaki argümanları ileterek yapabilirsiniz tar:

$ tar -cvzf test.tar test_file

2
Tek satırlık cevaplar çoğu zaman bu kadar yardımcı olmaz. Çözümünüzü destekleyen bazı kaynak materyaller (örneğin, belgeler) içerecek şekilde gönderinizi genişletmeyi düşünün.
HalosGhost

6
-cvia adlı dosyayı oluşturur -f('test.tar'). -zarşivi kaldırır. -vdetaylı kılar. Bunun doğru bir çözüm olmadığından eminim.
EpicVoyage
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.