Bagaimana Anda memverifikasi arsip tar yang sudah ditulis?

15

Saya tahu Anda dapat melakukan -W saat membuat arsip, tetapi bagaimana Anda memverifikasi dan arsip yang sudah dibuat? tvWf mengatakan itu bukan arsip tar yang valid?

$ mkdir tmp
$ echo asdkfjh > tmp/a
$ echo qweroiu > tmp/b
$ ls
tmp
$ tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b
$ tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: VERIFY FAILURE: 1 invalid header detected
tar: Error exit delayed from previous errors

Hal yang sama terjadi dengan tar 1.15 (yang merupakan default sistem pada centos 5) dan 1.26 (yang merupakan versi terbaru dari gnu).

cespinoza
sumber

Jawaban:

8

Anda tidak dapat menggunakan Wdengan t.

mkdir tmp
echo bdb > tmp/a
echo bdb > tmp/b

tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b

ls -l archive.tar
-rw-r--r-- 1 tony tony 10240 Jun 23 05:57 archive.tar

tar tvf archive.tar
drwxr-sr-x tony/tony         0 2011-06-23 05:57 tmp/
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/a
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/b

tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Saya percaya tsendiri sudah cukup untuk menguji arsip.

EightBitTony
sumber
tsendiri hanya daftar isi arsip. Saya ingin memverifikasi bahwa file dalam tar memiliki konten yang sama dengan aslinya (masih pada sistem file), yang saya pikir adalah apa yang Wharus dilakukan (benar?).
cespinoza
1
W melakukan itu hanya ketika menulis arsip. Jika Anda ingin memastikan konten adalah byte untuk kecocokan byte Anda harus mengekstraknya di suatu tempat dan diff / jumlah file.
EightBitTony
Bukan untuk saya: tar tvWf t.tar tar: --verify cannot be used with -t:tar (GNU tar) 1.27.1
Tom Hale
14

GNU tarmemiliki --compareopsi. Lihat Membandingkan Anggota Arsip dengan bagian Sistem File pada dokumentasi untuk detailnya.

jon
sumber
5
Misalnya tar -df /path/to/archive.tar.bz2akan menunjukkan perbedaan antara file dalam arsip dan sistem file, menyelesaikan jalur relatif dalam arsip terhadap direktori kerja saat ini.
Walf
3

Joerg Schillings starmenggunakan opsi diff , yang dapat membandingkan file dalam arsip tar dengan aslinya. Anda dapat menyatakan apa yang harus diakui sebagai perbedaan.

0 1 newt pts/1 ~ 17> :> tmp/testfile
0 1 newt pts/1 ~ 19> star -cz tmp > tmp.tar
0 1 newt pts/1 ~ 19> echo bla > tmp/testfile
0 1 newt pts/1 ~ 20> star -z -diff diffopts=not,times < tmp.tar
diffopts=perm,symperm,type,nlink,uid,gid,uname,gname,size,data,rdev,hardlink,symlink,sympath,sparse,dir,acl,xattr,fflags
tmp/testfile: different size,data
star: 115 blocks + 0 bytes (total of 1177600 bytes = 1150.00k).

Perhatikan bahwa disebutkan testfilesebagai ukuran dan data yang berbeda. Jika saya tidak mengecualikan waktu (termasuk waktu akses!) Itu akan menyatakan waktu akses juga, dan juga daftar semua file yang waktu telah berubah hanya dengan melihatnya.

Sejak kematian BerliOS, stardapat ditemukan di sourceforge . Ini sangat portabel, dan kompilasi tanpa rasa sakit pada sebagian besar sistem unixoid dan mirip-unixoid.

Tatjana Heuser
sumber
Sumber terbaru ada dalam schilytoolspaket sumber.
schily