解压到与文件同名的文件夹(不带 .zip 扩展名)

Ema*_*sev 24 directory zip

如何将文件(例如:)解压缩foo.zip到具有相同名称 ( foo/)的文件夹中?

基本上,我想创建一个 unzip 的别名,将文件解压缩到同名文件夹中(而不是当前文件夹)。这就是 Mac 的解压缩实用程序的工作方式,我想在 CLI 中执行相同的操作。

小智 25

这是另一种变体,可以使用 1-liner 来处理当前目录中的多个 zip 文件:

for f in *.zip; do unzip "$f" -d "${f%.zip}"; done
Run Code Online (Sandbox Code Playgroud)

对于仅一个文件(即在函数中使用),它将是:

unzip "$1" -d "${1%.zip}"
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 22

我用unar这个;默认情况下,如果存档包含多个顶级文件或目录,它会创建一个目录来存储提取的内容,以您描述的方式以存档命名:

unar foo.zip
Run Code Online (Sandbox Code Playgroud)

您可以在所有情况下使用以下-d选项强制创建目录:

unar -d foo.zip
Run Code Online (Sandbox Code Playgroud)

或者,一个函数可以用unzip

unzd() {
    if [[ $# != 1 ]]; then echo I need a single argument, the name of the archive to extract; return 1; fi
    target="${1%.zip}"
    unzip "$1" -d "${target##*/}"
}
Run Code Online (Sandbox Code Playgroud)

target=${1%.zip}
Run Code Online (Sandbox Code Playgroud)

行删除.zip扩展名,不考虑其他任何内容(因此foo.zip变为foo,并~/foo.zip变为~/foo)。这

${target##*/}
Run Code Online (Sandbox Code Playgroud)

参数扩展删除了直到最后的任何东西/,所以~/foo变成foo. 这意味着该函数将任何.zip文件提取到当前目录中以它命名的目录中。使用unzip $1 -d "${target}",如果你要提取的存档目录沿着它来代替。


Sil*_*ker 16

使用unzip -d exdir zipfile.zip将 zipfile解压缩到特定目录中。原则上,从字面上阅读您的帖子,您可以编写这样的函数:

unzip_d () {
    unzip -d "$1" "$1"
}
Run Code Online (Sandbox Code Playgroud)

由于您希望删除.zip扩展名,您可以使用特殊的变量语法来做到这一点:

unzip_d () {
    zipfile="$1"
    zipdir=${1%.zip}
    unzip -d "$zipdir" "$zipfile"
}
Run Code Online (Sandbox Code Playgroud)

  • 附加提示:使用 [basename](https://linux.die.net/man/1/basename) 使其更健壮。(虽然已经投票)**;-) (2认同)