创buildzip文件的文件夹并解压缩

如果我select一个zip文件并右键单击“解压缩”,则会创build一个带有zip文件名的文件夹,并将zip文件的全部内容解压缩到该文件夹​​中。

不过,我想通过shell转换几个zip文件。 但是当我这样做

unzip filename.zip 

文件夹"filename"不会被创build,但所有的文件被提取到当前目录中。

我已经看过参数,但没有这样的参数。 我也试过了

 for zipfile in \*.zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done 

但2. $ zipfile和4. $ zipfile的.zip扩展名必须用sed删除。 如果我做

 for zipfile in \*.zip; do mkdir sed 's/\.zip//i' $zipfile; unzip $zipfile -d sed 's/\.zip//i' $zipfile/; done 

它不工作。

如何正确地replace$zipfile.zip扩展名?

有比shell脚本更简单的方法吗?

unzip file.zip -d xxx文件unzip file.zip -d xxx将文件提取到目录xxx,如果xxx不存在,xxx将被创build。 你可以检查手册页的细节。

下面的awk行应该做的工作:

 ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh 

看下面的testing

注意我最后删除了|sh ,因为我的拉链是假的档案; 我只想在这里显示生成的命令行。

 kent$ ls -l total 0 -rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.zip kent$ ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}' unzip 001.zip -d 001 unzip 002.zip -d 002 unzip 003.zip -d 003 unzip 004.zip -d 004 unzip 005.zip -d 005 unzip 006.zip -d 006 unzip 007.zip -d 007 

“提取这里”只是你正在使用的任何unzip包装的一个特点。 unzip只会提取存档中的实际内容。 有可能没有比shell脚本更简单的方法。 但是,如果你有一个POSIX兼容的shell, sedawk等不需要。

 for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done 

(你不能逃避*或pathname扩展不会发生。)要知道,如果ZIP压缩文件包含一个目录,比如Eclipse归档文件(它总是包含eclipse/ ),那么你最终会得到./eclipse*/eclipse/eclipse.ini在任何情况下。 在unzip之前添加echo进行unzip运行。

如果你有p7zip,安装了7zip的命令行版本,那么你可以使用:

 7z x '*.zip' -o'*' 

aunpack的aunpack会默认为各种档案。