从压缩的存档中仅将特定文件提取到给定目录


150

我需要从我知道路径的ZIP文件中提取单个文件。是否有如下命令:

unzip -d . myarchive.zip path/to/zipped/file.txt

不幸的是,以上命令提取并重新创建了位于的文件的完整路径./path/to/zipped/file.txt。有没有办法将文件简单地拉到指定目录中?

Answers:


130

您可以使用以下-p选项将文本仅提取到标准输出:

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

这不会提取元数据(日期,权限等),而只会提取文件内容。这是为了不必以后移动文件而带来的便利而付出的代价。

或者,将归档文件挂载为目录,然后仅复制文件。使用AVFS

mountavfs
cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

或带保险丝

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d

2
@TK Kocheran:为什么不测试呢?我测试了第一个命令,它起作用了。
用户未知,

1
@TKKocheran:Jar文件是zip文件,因此解压缩和融合zip方法显然可以工作。AVFS方法也可以使用,因为AVFS会根据文件名猜测格式并了解有关信息.jar;如果文件的名称不同,则可能需要告诉AVFS使用其zip处理程序,例如~/.avfs$PWD/foo.apk#uzip/META-INF
吉尔斯

1
实际上,我的意思是从ZIP压缩文件中提取JAR /二进制文件。我还没有机会进行测试,使用上面的第一个命令提取二进制文件是否可以看到任何问题?
Naftuli Kay 2011年

2
@TKKocheran:没问题,-p按原样提取文件(进行-c文本转换)。
Gilles

2
我认为@Myles的答案更为优雅,因为它不需要输出重定向,并且保留了文件属性。
gertvdijk 2012年

152
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

输入压缩文件的完整路径,而不仅仅是文件名。确保保留从zip文件中看到的结构。

这将提取单个文件file.txtmyarchive.zip/path/to/unzip/to/file.txt


18
这是更好的答案。
redburn 2014年

1
它不能处理您希望生成的文件名不同的情况。
Oleg Vaskevich 2014年

6
“ -j”参数:垃圾路径。不会重新创建档案的目录结构;所有文件都存放在提取目录中(默认情况下是当前目录)。“ -d”参数:将文件提取到exdir
e1i45

1
@OlegVaskevich,问题不要求目标文件名不同
Tapemaster

是的,我知道。仍然投票。:)
Oleg Vaskevich 2015年

24

简单版本:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

这将PATH_OF_FILE_INSIDE_ARCHIVE在当前目录中重新创建,但仅提取指定的文件。

要列出Zip存档中的所有文件:

unzip -l ARCHIVE_NAME

1
比接受的答案简单得多。
FractalSpace

确实,它工作得很好,而且操作简单
Mahmoud Ali

2

在macOS上,默认情况下使用Info-Zip

首先列出文件以查找所需内容

unzip -l my.zip

然后提供要从存档中提取的文件列表

unzip my.zip annoying/path/to/file

与-p结合使用以进行标准输出

unzip -p my.zip annoying/path/to/file >./file

1
我不明白为什么人们会在没有任何明显理由的情况下投票否决。这是一个正确的答案(不仅适用于macOS)
FractalSpace'Sep

@FractalSpace显然不是,它与OP想要的相反。
康拉德·鲁道夫

关键是获取单个文件。输出到标准输出和重定向使用-p标志是微不足道的,但我已经明确地添加它
卡梅隆洛厄尔·帕尔默

2

使用简单:

unzip zipfile.zip path/inside/zip/file.txt

它将使文件膨胀。

$ unzip -l ./../html.zip | grep wp-config

     3328  07-22-2019 15:10   html/wp-config.php

     2898  01-07-2019 23:30   html/wp-config-sample.php

$ unzip ./../html.zip html/wp-config.php

     Archive:  ./../html.zip
     inflating: html/wp-config.php

$ ls -lrth

     total 4.0K
     drwxr-sr-x 2 apache apache 4.0K Jul 26 14:41 html

$ ls -lrth html/*

     total 4.0K
     -rw-rw-rw- 1 apache apache 3.3K Jul 22 15:10 wp-config.php

还可以添加-d outpath参数指定的文件插嘴说。
埃弗伦

以及-j避免压缩路径的争论
Efren
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.