我需要从我知道路径的 ZIP 文件中提取单个文件。有没有类似下面的命令:
unzip -d . myarchive.zip path/to/zipped/file.txt
不幸的是,上面的命令提取并重新创建了文件的整个路径./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
-j
: 垃圾路径。存档的目录结构不会重新创建;所有文件都存放在解压目录中(默认为当前目录)
-d
:用于提取文件的可选目录。
https://www.mankier.com/1/unzip
多个文件:
unzip -j myarchive.zip in/archive/file.txt another/file.ext -d /path/to/unzip/to
整个子目录
unzip -j archive.zip "sub/dir/*" -d "dest/dir"
答案3
更简单的版本:
unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE
这将PATH_OF_FILE_INSIDE_ARCHIVE
在当前目录中重新创建,但仅提取指定的文件。
要列出 Zip 存档中的所有文件:
unzip -l ARCHIVE_NAME
答案4
简单使用:
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