如何检查如果一个Unix .tar.gz文件是一个有效的文件没有解压缩?
我也find了这个链接 。 但是我想知道是否有任何现成的命令行解决scheme?
那么得到一个压缩包的列表并丢弃输出,而不是解压缩文件呢?
tar -tzf my_tar.tar.gz >/dev/null
按照评论编辑。 谢谢zrajm!
按照评论编辑。 感谢冻火! 这个testing决不意味着数据的完整性。 因为它被devise成一个磁带存档实用程序,大多数tar实现将允许同一个文件的多个副本!
你可以使用gzip -t选项来testing文件的完整性
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
来自: http : //unix.ittoolbox.com/groups/technical-functional/shellscript-l/how-to-test-file-integrity-of-targz-1138880
testinggzip文件没有损坏:
gunzip -t file.tar.gz
testing里面的tar文件没有损坏:
gunzip -c file.tar.gz | tar t > /dev/null
作为备份的一部分,你可能只需要运行后面的命令并检查$的值? 之后为0(成功)值。 如果tar或gzip有问题,$? 将具有非零值。
如果你想在不提取到磁盘的情况下对tar文件进行真正的testing提取,请使用-O选项。 这将提取到标准输出而不是文件系统。 如果tar文件损坏,则进程将会中止并出现错误。
失败的焦油球testing的例子…
$ 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.*
工作示例…
$ 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*
您也可以使用pigz
(并行gzip)检查* .tag.gz文件的内容,以加速归档检查:
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
我已经尝试了下面的命令,他们工作得很好。
bzip2 -t file.bz2 gunzip -t file.gz
但是,我们可以发现这两个命令是耗时的。 也许我们需要一些更快的方法来确定压缩文件的完整性。
一个不错的select是使用tar -tvvf <filePath>
,它添加一个报告文件types的行。
有效的.tar文件中的示例:
> 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
损坏的.tar文件:
> tar -tvvf corrupted.tar tar: Unrecognized archive format Archive Format: (null), Compression: none tar: Error exit delayed from previous errors.
>使用-O选项。 […]如果tar文件损坏,进程将中止并出错。
有时是的,但有时候不是。 我们来看一个损坏的文件的例子:
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
表明:
my_name Fool
即使你执行
echo $?
tar说没有错误:
0
但该文件已损坏,它现在有“傻瓜”,而不是“皮特”。
这些都是非常不理想的解决scheme。 从GZIP规范
ID2(身份证2)
这些文件具有ID1 = 31(0x1f,\ 037),ID2 = 139(0x8b,\ 213)的固定值,用于标识文件为gzip格式。
必须编码成您正在使用的任何语言。