检查文件是否为存档;如果是,请提取

检查文件是否为存档;如果是,请提取

如何检查文件是否为存档,然后使用 解压它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,则该文件是有效的存档。

相关内容