Mic*_*hał 5 scripting archive shell-script 7z files
如何检查文件是否为存档,然后使用7z. 我知道我可以通过file命令检查它,但由于它的输出,它在脚本中不起作用。我无法预测它可能是什么类型的存档。我只想做这样的事情:
我可以通过7z提取它吗?
如果是,提取,
如果不是,进一步
通过 bash 脚本。
Hun*_*son 11
filename=/tmp/foo.gz
if 7z t $filename; then
7z e $filename
else
echo $filename not an archive.
fi
Run Code Online (Sandbox Code Playgroud)
7z如果它执行的操作失败,该实用程序将返回一个非零退出代码。您可以使用此事实来尝试提取存档,然后在失败时执行其他操作:
if ! 7z e filename 2>/dev/null; then
# do something else
fi
Run Code Online (Sandbox Code Playgroud)
或者,取决于你还想做什么,或者不做什么,
if 7z e filename 2>/dev/null; then
exit
fi
# do something else
Run Code Online (Sandbox Code Playgroud)
可以缩短为
7z e filename 2>/dev/null && exit
# do something else
Run Code Online (Sandbox Code Playgroud)
你显然可以把它包起来
if 7z t filename; then
fi
Run Code Online (Sandbox Code Playgroud)
并捕获提取失败(由于没有足够的磁盘空间或提取期间可能发生的任何其他错误)与确定这确实是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
Run Code Online (Sandbox Code Playgroud)