我有一个bash shell脚本解压zip文件,并操纵生成的文件。由于这个过程,我希望我感兴趣的所有内容都在一个文件夹中,如下所示:
file.zip
/file
/contentFolder1
/contentFolder2
stuff1.txt
stuff2.txt
...
我注意到Windows上的用户通常不创建子文件夹,而是提交一个爆炸的zip文件,如下所示:
file.zip
/contentFolder1
/contentFolder2
stuff1.txt
stuff2.txt
...
如何检测这些爆炸拉链,以便我可以相应地处理它们?是否可以先解压缩文件?
答案 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
仅覆盖第二个文件是否更新。