linux - 为目录中的每个 zip 文件创建一个专用文件夹并提取 zip 文件

标签 linux shell sed awk unzip

如果我选择一个 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/

相关文章:

正则表达式在 sed 中重复缩进

linux - 在linux中的多个目录中的文件上运行shell脚本

linux - 如何从 shell bash 中的文本文件中提取模式

linux - "Unable to find remote helper for ' https '"在 git 克隆期间

linux - 我需要从文件中的列子集而不是整个文件中找到一个字符串

linux - 使用top命令监控Linux服务器的系统性能

c - Unix 套接字的 sockaddr_un.sun_path 区分大小写吗?

bash - 如何在 Unix 上查找所有文件并用逗号分隔结果?

linux - 获取模式第一次出现和第 n 次出现之间的子字符串

bash - 使用 find、wc 和 sed 来计算行数