![如何从 tarball 中提取特定目录?并剥离主目录?](https://linux22.com/image/42022/%E5%A6%82%E4%BD%95%E4%BB%8E%20tarball%20%E4%B8%AD%E6%8F%90%E5%8F%96%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95%EF%BC%9F%E5%B9%B6%E5%89%A5%E7%A6%BB%E4%B8%BB%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我想从 wordpress tarball 中提取特定目录。专门wp-includes
针对 .
.看来 tarball 内的目录结构是,wordpress/wp-includes
但我只需要./wp-includes
在提取它后,就不需要前导 wordpress 目录。我该怎么做?
答案1
要提取特定目录(及其内容,递归地),只需将其作为命令行上的额外参数传递即可。和GNU 焦油,您可以使用该选项剥离前导目录--strip-components
(更一般地使用 转换文件名--transform
)。在非 Linux 系统上,您可以使用帕克斯(它在 POSIX 中,但某些 Linux 发行版在默认安装中省略了它)及其-s
选项。
tar xf foo.tar --strip-components=1 wordpress/wp-includes #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes
您可以通过附加规则来将包含列表与重写规则合并,以将所有内容重写为空名称(这意味着“不提取”;该规则仅在以前的规则不匹配时才适用)。
pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!
答案2
假设你有 GNU tar,你可以使用--strip-components
:
$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes
我相信当前版本的 BSD tar 也支持--strip-components
.在最坏的情况下,你可以这样做:
$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress