小编典典

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

linux

如果我选择一个zip文件,然后右键单击“在此处提取”,则会创建一个包含zip文件名的文件夹,并将zip文件的全部内容提取到其中。

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

unzip filename.zip

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

我看过参数,但是没有这样的参数。我也试过

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

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

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

它不起作用。

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

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


阅读 350

收藏
2020-06-07

共1个答案

小编典典

“在这里提取”仅是unzip您使用的任何包装器的功能。
unzip只会提取存档中的实际内容。没有比shell脚本更简单的方法了。但是sedawk如果您具有POSIX兼容的外壳程序,则不需要,等等。

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

(您绝不能逃脱,*否则路径名扩展将不会发生。)请注意,如果ZIP归档文件包含目录(例如Eclipse归档文件(始终包含eclipse/)),则无论如何都将以结尾./eclipse*/eclipse/eclipse.ini。试运行echo前添加unzip

2020-06-07