如果我 Select 一个zip文件并右键单击"extract here",就会创建一个带有zip文件名的文件夹,并将zip文件的全部内容解压缩到其中.

但是,我想通过shell转换几个zip文件.

unzip filename.zip

未创建文件夹"filename",但所有文件都被提取到当前目录中.

我已经查看了参数,但没有这样的参数.

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

但是2的.zip扩展$zipfile和4$zipfile必须用sed移除.

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

它不起作用.

如何正确替换$zipfile.zip扩展?

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

推荐答案

"extract here"只是您正在使用的unzip个包装器的一个特性.unzip将只提取档案中实际存在的内容.可能没有比shell脚本更简单的方法了.但如果您有一个兼容POSIX的shell,则不需要sedawk等:

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

(您不能退出*,否则将无法进行路径名扩展.)请注意,如果ZIP归档文件包含一个目录,比如Eclipse归档文件(总是包含eclipse/个目录),那么在任何情况下,最终都会得到./eclipse*/eclipse/eclipse.ini个目录.在unzip之前添加echo,进行干运行.

Linux相关问答推荐

一个bash脚本,用于基于2列映射文件替换多个文件名中的模式

AddressSaniizer随机抛出没有任何解释的SIGSEGV

加载ELF64头文件为什么会导致分段错误?

ln命令报错target not a directory

Qt会泄漏内存吗?

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

在 bash 中解析变量

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

`std::cout` 是如何实现的?

查找在特定日期从特定机器登录的所有用户

std::system 使用什么Shell?

你如何在 C 中的 Linux 上进行非阻塞控制台 I/O?

分段故障处理

为什么导入 SQL 这么慢?

从Linux中的行尾删除空格

在 VIM 中搜索和替换导致尾随字符

如何使用 bash 在文件中间添加一行文本?

区分 Windows 和类 Unix 系统的 Makefile

基于shell中正则表达式的 colored颜色 突出显示输出

获取本地时区的 Olson TZ 名称?