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

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

如何将文件(例如:foo.zip)解压缩到同名文件夹(foo/)?

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

答案1

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

unar foo.zip

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

unar -d foo.zip

或者,函数可以通过以下方式执行此操作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##*/}"
}

target=${1%.zip}

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

${target##*/}

参数扩展删除最后的所有内容/,就~/foo变成了foo。这意味着该函数将任何.zip文件提取到当前目录中以其命名的目录中。unzip $1 -d "${target}"如果您想将存档解压到与其并排的目录中,请使用此选项。

unar适用于 macOS(及其 GUI 应用程序,解档者)、Windows 和 Linux;它被打包在许多发行版中,例如 unar在 Debian 及其衍生品、Fedora 及其衍生品、community/unarchiverArch Linux 中。

答案2

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

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

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

unzip "$1" -d "${1%.zip}"

答案3

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

unzip_d () {
    unzip -d "$1" "$1"
}

既然你想要。压缩尽管删除了扩展名,您可以使用特殊的变量语法来做到这一点:

unzip_d () {
    zipfile="$1"
    zipdir=${1%.zip}
    unzip -d "$zipdir" "$zipfile"
}

相关内容