我想使用标准工具从 .zip 文件中提取特定子文件夹(及其所有内容)unzip
。我对它的父目录不感兴趣,也不想创建它们。
例如:
unzip /path/to/archive.zip "var/www/html/example.com/*" -d ~/website
我希望文件夹仅~/website
包含存档中的内容,但实际上,解压缩会重新创建文件夹的父目录路径,因此我最终得到的是。example.com
~/website/var/www/html/example.com
我看到了有关提取特定文件夹的这个疑问,但它没有回答这个问题。
您始终可以使用 libarchive,
bsdtar
它支持提取和许多其他存档格式,并允许您在提取时使用/类似方式zip
编辑文件的路径:sed
pax
s/regex/replacement/
另外,
perl
模块Archive::Zip
有一个extractTree("subdir", "target")
可以用于此目的:如果
var/www/html/example.com
子目录中没有文件,您还可以使用实用程序-j
的选项,该选项提取不带前导目录组件的文件,像解压缩文件内容一样展平目录结构,但不创建存档文件夹:InfoZIP
unzip
不,这不是一个功能
unzip
。(我只是需要阅读man unzip
以检查,你也应该这样做!)您可以调用 unzip
-l
来首先获取存档中的文件列表,grep
使用您想要的子目录对其进行过滤,然后循环调用结果以unzip
提取每个单独的文件,并选择-c
将它们输出到 stdout 并将它们写入目标目录,正如您所希望的那样。或者,您知道,
mv
提取后再进行一次。