如何将文件(例如:)解压缩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)