![如何验证已经写入的 tar 存档?](https://linux22.com/image/2459/%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81%E5%B7%B2%E7%BB%8F%E5%86%99%E5%85%A5%E7%9A%84%20tar%20%E5%AD%98%E6%A1%A3%EF%BC%9F.png)
我知道您可以-W
在创建存档时使用,但是如何验证已经创建的存档?tvWf
说这不是有效的 tar 存档?
$ 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
tar 1.15(centos 5 上的系统默认值)和 1.26(gnu 的最新版本)也会发生同样的情况。
答案1
GNUtar
有一个--compare
选项。请参阅将存档成员与文件系统进行比较文档部分了解详细信息。
答案2
您不能W
与 一起使用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
仅此一项就足以测试档案。
答案3
乔尔格·席林斯 (Joerg Schillings star
)差异选项,它能够将 tar 存档中的文件与其原始文件进行比较。您可以说明什么应该被视为差异。
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).
请注意,它提到了testfile
不同的大小和数据。如果我没有排除时间(包括访问时间!),它也会说明访问时间,并且还会通过查看时间来列出所有时间已更改的文件。
自 BerliOS 消亡以来,star
可以在以下位置找到来源锻造。它具有高度可移植性,并且可以在大多数 unixoid 系统和类似的 unixoid 系统上轻松编译。
答案4
验证选项应该在创建期间使用,而不是创建之后。此外,之后还会添加压缩。
%> tar -cvpWlf test.tar sh.save
sh.save/
sh.save/test.tar
sh.save/Downloads/
sh.save/mount.sh
sh.save/Documents/
sh.save/skip_dirs_in_find.sh
Verify sh.save/
Verify sh.save/test.tar
Verify sh.save/Downloads/
Verify sh.save/mount.sh
Verify sh.save/Documents/
Verify sh.save/skip_dirs_in_find.sh
尽管 tar 提供了“--compare”选项。
man tar
:
-d、--diff、--compare
查找存档和文件系统之间的差异。参数是可选的,并指定要比较的存档成员。如果未给出,则假定当前工作目录。