./path/to/zipped/file.txt
的完整路径。有没有办法将文件简单地拉到指定目录中?#1 楼
您可以使用-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 楼
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"
输入压缩文件的完整路径,而不仅仅是文件名。确保从zip文件中看到的结构保持不变。
这会将
file.txt
中的单个文件myarchive.zip
提取到/path/to/unzip/to/file.txt
中。评论
它不能处理您希望生成的文件名不同的情况。
–奥列格(Oleg Vaskevich)
14-10-27在21:21
“ -j”参数:垃圾路径。不会重新创建档案的目录结构;所有文件都存放在提取目录中(默认情况下是当前目录)。 “ -d”参数:将文件解压缩到exdir
– e1i45
15年1月29日在16:14
@OlegVaskevich,问题不要求目标文件名不同
– Tapemaster
15年5月11日在10:49
仅供参考,以查找zip文件的路径,减少使用:superuser.com/questions/216617/…
–杨艺博
17-10-24在6:17
unzip接受通配符,因此要解压缩子目录:unzip -j archive.zip“ sub / dir / *” -d“ dest / dir”
– Noam Manos
20-05-21在10:27
#3 楼
更简单的版本:unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE
这将在当前目录中重新创建
PATH_OF_FILE_INSIDE_ARCHIVE
,但仅提取指定的文件。要列出Zip存档中的所有文件: unzip -l ARCHIVE_NAME
评论
这也适用于通配符,至少在CentOS中如此-例如解压缩foo.zip * .bar
–奥兰
20-05-21在14:32
#4 楼
在macOS上,默认情况下使用Info-Zip首先列出文件以查找所需的内容。
unzip -l my.zip
,然后从存档
unzip my.zip annoying/path/to/file/in/zip
用-p组合标准输出
unzip -p my.zip annoying/path/to/file/in/zip >./file
或-j提取到当前目录(丢弃垃圾路径)
unzip -j my.zip annoying/path/to/file/in/zip
-d可以指定创建任意目录
unzip -d /path/to/dir my.zip annoying/path/to/file/in/zip
如果要将文件放在
-d
目录中,则可能需要将其与-j
选项合并。#5 楼
简单易用: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参数以指定文件放置位置。
– Efren
19/09/18'2:45
和-j参数可以避免压缩路径
– Efren
19-09-18在2:56
#6 楼
如果要从档案库中还原文件的元数据,能够以任意名称还原任何类型(包括符号链接)的文件,并选择文件的新名称,则可以使用libarchive的bsdtar
(它也支持ZIP格式)档案),而不是unzip
,例如:因此,如果要提取的存档成员的路径确实包含unzip
,some/dir/originalname
,*
或?
字符,则需要按以下所示对它们进行转义::
bsdtar -nqvvxpf file.zip -'s/.*/newname/S' some/dir/originalname
如果存档成员名为
\
。请注意,该方法适用于libarchive支持的任何存档格式,不只是拉链。
#7 楼
提取到相对目录unzip -j -d relativedir archive.zip path/in/archive/file.ext
提取到当前目录
unzip -j -d . archive.zip path/in/archive/file.ext
提取到绝对目录
unzip -j -d /absolutedir archive.zip path/in/archive/file.ext
评论
它可以用于二进制文件,例如jar文件吗?
– Naftuli Kay
2011年6月1日的1:01
@TKKocheran:Jar文件是zip文件,因此解压缩和融合zip方法显然可以工作。 AVFS方法也可以使用,因为AVFS根据文件名猜测格式并了解.jar。如果文件的名称不同,则可能需要告诉AVFS使用其zip处理程序,例如〜/ .avfs $ PWD / foo.apk#uzip / META-INF。
–吉尔斯'所以-不再是邪恶的'
2011年6月1日7:19
实际上,我的意思是从ZIP压缩文件中提取JAR /二进制文件。我还没有机会进行测试,使用上面的第一个命令提取二进制文件是否可以看到任何问题?
– Naftuli Kay
2011年6月1日18:41
@TKKocheran:没问题,-p按原样提取文件(-c进行文本转换)。
–吉尔斯'所以-不再是邪恶的'
2011年6月1日20:50
我认为@Myles的答案更为优雅,因为它不需要输出重定向,并且保留了文件属性。
– Gertvdijk
2012年12月4日15:42