Saya menemukan pertanyaan Bagaimana menentukan apakah data adalah file tar yang valid tanpa file? , tetapi saya bertanya-tanya: apakah ada solusi baris perintah yang sudah jadi?
Saya menemukan pertanyaan Bagaimana menentukan apakah data adalah file tar yang valid tanpa file? , tetapi saya bertanya-tanya: apakah ada solusi baris perintah yang sudah jadi?
Jawaban:
Bagaimana dengan hanya mendapatkan daftar tarball dan membuang hasilnya, daripada mendekompresi file?
tar -tzf my_tar.tar.gz >/dev/null
Diedit sesuai komentar. Terima kasih zrajm!
Edit sesuai komentar. Terima kasih Frozen Flame! Tes ini sama sekali tidak menyiratkan integritas data. Karena ini dirancang sebagai utilitas pengarsipan tape, sebagian besar implementasi tar akan memungkinkan banyak salinan dari file yang sama!
-z
opsi juga tidak dibutuhkan. Itu tidak melakukan apa pun dalam mode ekstrak atau daftar.
-z
Itu benar-benar kasus dengan GNU tar - apakah Anda tahu apakah ini benar di tempat lain (BSD, dll.)?
tar.gz
? Ada informasi dukungan?
Anda mungkin dapat menggunakan opsi gzip -t untuk menguji integritas file
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
Untuk menguji file gzip tidak rusak:
gunzip -t file.tar.gz
Untuk menguji file tar di dalamnya tidak rusak:
gunzip -c file.tar.gz | tar -t > /dev/null
Sebagai bagian dari pencadangan, Anda mungkin dapat menjalankan perintah terakhir dan memeriksa nilai $? setelah itu untuk nilai 0 (berhasil). Jika tar atau gzip bermasalah, $? akan memiliki nilai bukan nol.
bzip2 -t file.bz2
untuk file bz2.
tar -t > /dev/null
(catatan: t
vs -t
)?
Jika Anda ingin melakukan uji coba ekstrak file tar tanpa mengekstrak ke disk, gunakan opsi -O. Ini memuntahkan ekstrak ke keluaran standar, bukan ke sistem berkas. Jika file tar rusak, proses akan dibatalkan dengan kesalahan.
Contoh tes bola tar yang gagal ...
$ 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.*
Contoh Kerja ...
$ 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*
> /dev/null
contoh kerja juga.
Anda juga dapat memeriksa konten file * .tag.gz menggunakan pigz
(parallel gzip) untuk mempercepat pemeriksaan arsip:
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
Saya telah mencoba perintah berikut dan mereka bekerja dengan baik.
bzip2 -t file.bz2
gunzip -t file.gz
Namun, kami dapat menemukan dua perintah ini memakan waktu. Mungkin kita membutuhkan cara yang lebih cepat untuk menentukan utuh dari file kompres.
Pilihan yang bagus adalah menggunakan tar -tvvf <filePath>
yang menambahkan baris yang melaporkan jenis file.
Contoh dalam file .tar yang valid:
> 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
File .tar rusak:
> tar -tvvf corrupted.tar
tar: Unrecognized archive format
Archive Format: (null), Compression: none
tar: Error exit delayed from previous errors.
Ini semua adalah solusi yang sangat kurang optimal. Dari spesifikasi GZIP
ID2 (IDentification 2)
Ini memiliki nilai tetap ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213), untuk mengidentifikasi file sebagai dalam format gzip.
Harus dikodekan ke dalam bahasa apa pun yang Anda gunakan.
> gunakan opsi -O. [...] Jika file tar rusak, proses akan dibatalkan dengan kesalahan.
Terkadang ya, terkadang tidak. Mari kita lihat contoh file yang rusak:
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
Itu menunjukkan:
my_name
Fool
Bahkan jika Anda mengeksekusi
echo $?
tar mengatakan bahwa tidak ada kesalahan:
0
tetapi file tersebut rusak, sekarang menjadi "Bodoh" bukan "Pete".
-v
jika Anda hanya menyalurkan output ke/dev/null
?