如何在bash中检查爆炸的zip文件?

时间:2009-10-16 19:48:24

标签: linux bash

我有一个bash shell脚本解压zip文件,并操纵生成的文件。由于这个过程,我希望我感兴趣的所有内容都在一个文件夹中,如下所示:

file.zip  
  /file  
    /contentFolder1
    /contentFolder2
    stuff1.txt
    stuff2.txt
    ...

我注意到Windows上的用户通常不创建子文件夹,而是提交一个爆炸的zip文件,如下所示:

file.zip  
    /contentFolder1
    /contentFolder2
    stuff1.txt
    stuff2.txt
    ...

如何检测这些爆炸拉链,以便我可以相应地处理它们?是否可以先解压缩文件?

3 个答案:

答案 0 :(得分:3)

如果要查看,unzip -l将打印zip文件的内容而不提取它们。但是,你必须按一下输出,因为它会打印各种额外的碎屑。

答案 1 :(得分:2)

首先解压缩到目录,如果zip不是炸弹,则删除额外的图层。

tempdir=`mktemp -d`
unzip -d $tempdir file.zip
if [ $(ls $tempdir | wc -l) = 1 ]; then
        mv $tempdir/* .
        rmdir $tempdir
else
        mv $tempdir file
fi

答案 2 :(得分:0)

我不会尝试检测它。我只是强行解压缩做我想做的事。使用InfoZip:

$ unzip -j -d unzip-output-dir FileFromUntrustedSource.zip

-j使其忽略文件中的任何目录结构,-d告诉它将文件放在特定目录中,必要时创建它。

如果有两个名称相同但位于不同子目录中的文件,则上述命令将解压缩是否要用第二个覆盖第一个。您可以添加-o以强制覆盖而不询问,或-f仅覆盖第二个文件是否更新。