Làm thế nào để bạn xác minh một kho lưu trữ tar đã được viết?


15

Tôi biết rằng bạn có thể làm -W khi tạo một kho lưu trữ, nhưng làm thế nào để bạn xác minh và lưu trữ đã được tạo? tvWf nói rằng nó không phải là một kho lưu trữ tar hợp lệ?

$ 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

Điều tương tự cũng xảy ra với cả tar 1.15 (là mặc định của hệ thống trên centos 5) và 1.26 (là phiên bản mới nhất từ ​​gnu).

Câu trả lời:


8

Bạn không thể sử dụng Wvới 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

Tôi tin rằng tmột mình là đủ để kiểm tra các kho lưu trữ.


tmột mình chỉ liệt kê nội dung của kho lưu trữ. Tôi muốn xác minh rằng các tệp trong tar có cùng nội dung với bản gốc (vẫn trên hệ thống tệp), mà tôi nghĩ là Wnên làm gì (phải không?).
cespinoza

1
W chỉ làm điều đó khi viết lưu trữ. Nếu bạn muốn đảm bảo nội dung là một byte cho byte phù hợp, bạn sẽ phải trích xuất nó ở đâu đó và diff / sum các tệp.
EightBitTony

Không cho tôi: tar tvWf t.tar tar: --verify cannot be used with -t:tar (GNU tar) 1.27.1
Tom Hale

13

GNU tarcó một --comparetùy chọn. Xem phần So sánh các thành viên lưu trữ với phần Hệ thống tệp của tài liệu để biết chi tiết.


5
Eg tar -df /path/to/archive.tar.bz2sẽ hiển thị sự khác biệt giữa các tệp trong kho lưu trữ và hệ thống tệp, giải quyết các đường dẫn tương đối trong kho lưu trữ so với thư mục làm việc hiện tại.
Walf

3

Joerg Schillings có starmột tùy chọn khác , có thể so sánh các tệp trong kho lưu trữ tar với bản gốc của chúng. Bạn có thể nói những gì nên được công nhận là sự khác biệt.

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).

Lưu ý rằng nó được đề cập testfilelà có kích thước và dữ liệu khác nhau. Nếu tôi không loại trừ thời gian (bao gồm cả thời gian truy cập!) Thì nó cũng đã nói rõ thời gian truy cập và cũng liệt kê tất cả các tệp có thời gian đã thay đổi chỉ bằng cách xem chúng.

Kể từ khi BerliOS sụp đổ, starcó thể được tìm thấy tại sourceforge . Nó có tính di động cao, và biên dịch không đau trên hầu hết các hệ thống unixoid và ngoại hình không giống nhau.


Các nguồn gần đây là trong schilytoolsgói nguồn.
schily
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.