我一直在操作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
,我真的不明白为什么,有任何建议吗?
答案 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
如果找到该文件,这将告诉您。