简单使用:

简单使用:

我需要从我知道路径的 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

相关内容