2016-11-21 69 views
0

我一直在操纵tar文件,我想测试文件是否存在提取它测试文件中tar归档

比方说,我有一个名为archive.tar中的tar文件,并在进入

tar -tvf Archive.Tar 

我得到:

-rwxrwxrwx guy/root   1502 2013-10-02 20:43 Directory/File 
-rwxrwxrwx guy/root   494 2013-10-02 20:43 Dir/SubDir/Text 
drwxrwxrwx guy/root    0 2013-10-02 20:43 Directory 

我想提取文本到我的工作目录,但我想,以确保它实际上是通过这样一个文件:

if [ -f Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

这个测试的结果总是KO,我真的不明白为什么,有什么建议?

+0

你如何测试这个“之前提取”?也就是说,如果你没有提取任何东西,什么是“Dir/Sub/Text”?目前还不清楚你的确切步骤是什么。 – kaylum

+0

在我正在写的脚本中,我必须测试说'Dir/Sub/Text'是一个文件,然后用'tar -xvf Archive.tar Dir/Sub/Text'提取它,对不起,因为没有足够明确 – AlexT

+0

我知道这就是你必须做的。但是,自从'-f'测试路径以后,你如何期望你显示的脚本能够工作?你不能测试一个不存在的路径(因为你没有提取它)。 – kaylum

回答

-1

这可能是一个解决方案,

tar -tvf Archive.Tar | grep Dir/Sub/Text 

这将让你知道,如果找到该文件。

+0

这是如何告诉你它是一个文件而不是目录? – kaylum

0

经过测试,输出为tar tf, 目录结尾为/的条目的tar, 的tar和GNU版本。 因此,为了测试是否Dir/Sub/Text是在存档, 你可以简单地用全系列匹配用grep一个文件或目录:

if tar tf Archive.Tar | grep -x Dir/Sub/Text >/dev/null 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

如果压缩文件包含Dir/SubDir/Text/,则Dir/SubDir/Text是一个目录,而grep将不匹配,所以KO将被打印。

如果压缩文件包含Dir/SubDir/Text无拖尾/, 然后Dir/SubDir/Text是一个文件和grep匹配, 所以确定将被打印出来。

0
if [ ! -d Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

将返回KO只有在目录文本存在,并且是确定的,如果它是一个文件或不存在(或者更准确地说也行,如果它是一个符号链接)。