在tar存档中测试文件

时间:2016-11-21 22:22:27

标签: linux bash file 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

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

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

此测试的结果始终为KO,我真的不明白为什么,有任何建议吗?

3 个答案:

答案 0 :(得分:0)

使用BSD和GNU版本的tar测试, 在tar tf的输出中, 目录的条目以/结尾。 因此,要测试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将匹配, 好的将打印出来。

答案 1 :(得分:0)

if [ ! -d Dir/Sub/Text ]
then
    echo "OK"
else
    echo "KO"
fi
只有当目录文本存在时,

才会返回KO,如果它是文件或不存在,则返回KO(如果它是符号链接,则确切也可以。)

答案 2 :(得分:-1)

这可能是一个解决方案,

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

如果找到该文件,这将告诉您。