我发现了一个问题:如何确定数据是否是有效的没有文件的tar文件?,但我想知道:是否有现成的命令行解决方案?
我发现了一个问题:如何确定数据是否是有效的没有文件的tar文件?,但我想知道:是否有现成的命令行解决方案?
Answers:
仅获取压缩包清单并丢弃输出,而不是解压缩文件怎么样?
tar -tzf my_tar.tar.gz >/dev/null
根据评论进行编辑。谢谢zrajm!
根据评论进行编辑。谢谢冷冻的火焰!该测试绝不意味着数据的完整性。因为它是作为磁带归档实用程序设计的,所以tar的大多数实现将允许同一文件的多个副本!
-z
也不需要该选项。在提取或列表模式下,它不执行任何操作。
-z
GNU tar肯定是这种情况-您知道在其他地方(BSD等)是否如此?
tar.gz
?有任何支持信息吗?
您可能可以使用gzip -t选项测试文件的完整性
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
要测试gzip文件是否未损坏:
gunzip -t file.tar.gz
要测试其中的tar文件没有损坏:
gunzip -c file.tar.gz | tar -t > /dev/null
作为备份的一部分,您可能只需要运行后一个命令并检查$?的值即可。然后输入0(成功)值。如果tar或gzip有问题,$?将具有非零值。
bzip2 -t file.bz2
用于bz2文件。
tar -t > /dev/null
(注:t
vs -t
)?
如果要对tar文件进行真实的测试提取而不提取到磁盘,请使用-O选项。这会将提取内容喷射到标准输出而不是文件系统。如果tar文件已损坏,则该过程将中止并显示错误。
沥青球测试失败的示例...
$ 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*
> /dev/null
该示例。
一个不错的选择是使用tar -tvvf <filePath>
它来添加一行报告文件类型的行。
有效的.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
但该文件已损坏,它现在具有“傻瓜”而不是“ Pete”。
-v
如果仅将输出传递到,为什么要使用/dev/null
?