如果我选择一个 zip 文件并右键单击“在此处提取”,则会创建一个带有 zip 文件名的文件夹,并将 zip 文件的全部内容提取到其中。
但是,我想通过 shell 转换几个 zip 文件。 但是当我这样做时
unzip filename.zip
文件夹"filename"
没有被创建,但是所有文件都被解压到当前目录中。
我查看了参数,但没有这样的参数。 我也试过了
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
它不工作。
如何正确替换$zipfile
的.zip
扩展名?
有没有比 shell 脚本更简单的方法?
最佳答案
unzip file.zip -d xxx
将文件解压到目录xxx,如果xxx不存在则创建xxx。您可以查看手册页了解详细信息。
下面的 awk 行应该可以完成这项工作:
ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh
请参阅下面的测试,
注意,我最后删除了 |sh
,因为我的 zip 是假文件;我只想在这里显示生成的命令行。
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
关于linux - 为目录中的每个 zip 文件创建一个专用文件夹并提取 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107886/