如何仅将压缩存档中的特定文件夹提取到给定目录?

Enk*_*ami 84 zip

如何从压缩档案中提取特定文件夹到给定目录?

我尝试使用

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"
Run Code Online (Sandbox Code Playgroud)

但这只会在我希望它解压缩到的路径上创建文件夹,并且不执行任何其他操作。

小智 89

unzip /path/to/archive.zip "in/archive/folder/*" -d "/path/to/unzip/to"
Run Code Online (Sandbox Code Playgroud)


Mar*_*ler 45

尝试:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法提取不保留路径“in/archive/folder/”的“in/archive/folder/*”内容?之后我最终使用 `mv` 来获取我需要的文件。 (13认同)
  • 在没有 \ 的情况下工作,只是 `"path/*"`。 (10认同)
  • `-j` 去除所有路径信息,所有文件进入目标文件夹。有没有办法只删除路径的公共部分?类似于 zip `-r`。 (9认同)
  • 使用`-j`。 (8认同)
  • 做过这个?当我运行 `unzip $repozip "$2-master/\*" -d /srv/www/magento/` 时,我收到 `警告:文件名不匹配:文件夹名/\*`,其中 `$2` 是 zip 中的文件夹名称我想拉出所有文件和文件夹 (5认同)
  • @BobStein-VisiBone 我需要这样做,用 ZIP 文件中的一些文件填充现有的目录结构。我所做的只是天真地解压缩,给我我不想要的目录结构,然后执行 `rsync -a path/i/dont/want/dir/ path/i/do/want/dir`,然后删除不需要的目录。请注意,第一个结尾的斜杠和第二个结尾斜杠的缺失对于 rsync 很重要。 (2认同)

rye*_*nus 9

现有的两个答案都是正确的,但指定目标目录有点棘手,应该更好地澄清。

假设/target/root/是原始解压缩操作的目标目录,例如:

unzip -qq src.zip -d "/target/root/"
Run Code Online (Sandbox Code Playgroud)

然后,/target/root/即使我们只想提取特定的子目录,我们也需要使用与目标目录相同的目录,就像解压缩的方式一样:

unzip -qq src.zip "sub/dir/*" "/target/root/"
Run Code Online (Sandbox Code Playgroud)

毕竟,规则其实很简单,-d选项使用相同的目标根目录

顺便说一句,该-qq选项是解压缩非常安静,请随意删除它。