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


59

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

我尝试使用

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

但这只会在我想将其解压缩到的路径上创建文件夹,而不会执行其他任何操作。

Answers:


60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

在EL 6上工作正常


3
这是什么EL 6?
塞尔达2014年

2
企业Linux 6(RHEL6)-Red Hat。
slm

这也有效;它的答案与Mark Adler的答案基本相同,但方式略有不同。
Enkouyami 2014年

@Enkouyami减去引号的差异,看起来完全一样。
卡米洛·马丁

1
@Enkouyami因为双引号中的反斜杠会转义一个字符(假设星号正在转义,但我猜这是一个错字),而单引号中的反斜杠不会被解释。如果要在字面上使用反斜杠,"\\"可以使用(否则,您始终必须记住哪些字符是特殊的转义符)。因此,如果作者的意思是“引用glob字符”(不必要),则这是引用差异。无论哪种方式,单个反斜杠都是错字。
卡米洛·马丁

39

尝试:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to

4
做过这个?我caution: filename not matched: foldername/\*在运行zip时的文件夹名称在unzip $repozip "$2-master/\*" -d /srv/www/magento/哪里时,$2我想从中拉出所有文件和文件夹
jeremy.bass 2013年

10
不使用\,而工作"path/*"
亚历克斯(Alex)

8
有没有办法提取不保留路径“ in / archive / folder /”的“ in / archive / folder / *”内容?最后,我最终使用它mv在需要它们的位置获取文件。
jerrygarciuh 2014年

6
使用-j了点。
Mark Adler 2014年

4
-j删除所有路径信息,所有文件进入目标文件夹。有没有办法只删除路径的公共部分?类似于拉链-r
鲍勃·斯坦

6

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

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

unzip -qq src.zip -d "/target/root/"

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

unzip -qq src.zip "sub/dir/*" "/target/root/"

毕竟,规则实际上很简单,-doption 使用相同的目标根目录

顺便说一句,该-qq选项是让拉锁真正安静,可以随时将其删除。


仅供参考:我做了<kbd> unzip -qq 2.3.zip“ magento2-2.3 / vendor / *”“ vendor /” </ kbd>并得到了<kbd>警告:文件名不匹配:vendor /`</ kbd>。这是在bash中的ubuntu安装上。我很少解压缩,可能还有其他问题……
Chris K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.