如何检查文件是否为存档,然后使用 解压它7z
?我知道我可以通过file
命令检查它,但由于其输出,它在脚本中不起作用。我无法预测它可能是什么类型的存档。我只想做类似的事情:
可以用7z提取吗?
如果是,则提取,
如果不是,则进一步
通过 bash 脚本。
答案1
filename=/tmp/foo.gz
if 7z t $filename; then
7z e $filename
else
echo $filename not an archive.
fi
答案2
如果实用程序执行的操作失败,则它7z
返回非零退出代码。您可以利用这一事实来尝试提取存档,然后在失败时执行其他操作:
if ! 7z e filename 2>/dev/null; then
# do something else
fi
或者,取决于您还想做什么或不想做什么,
if 7z e filename 2>/dev/null; then
exit
fi
# do something else
可以缩短为
7z e filename 2>/dev/null && exit
# do something else
你显然可以把它包含在
if 7z t filename; then
fi
并捕获提取失败(由于磁盘空间不足或提取过程中可能发生的任何其他错误),与确定这确实是存档的失败分开7z
。
完整的代码可能看起来像
if 7z t filename 2>/dev/null; then
if 7z e filename 2>/dev/null; then
echo 'All is good, archive extracted' >&2
else
echo 'Archive failed to extract' >&2
fi
else
echo '7z failed to process the file' >&2
fi
答案3
如果7z t <archive>
返回 0,则该文件是有效的存档。