创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, sed
, awk
等不需要。
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会默认为各种档案。