如何从 tarball 中提取特定目录?并剥离主目录?

如何从 tarball 中提取特定目录?并剥离主目录?

我想从 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

相关内容