如何从压缩包中提取特定目录?并删除领先的目录?


12

我想从wordpress压缩包中提取特定目录。专门wp-includes.。看来tarball内的目录结构是,wordpress/wp-includes但是我只需要./wp-includes在提取它之后就不需要任何主要的wordpress目录。我该怎么做?

Answers:


13

要提取特定目录(及其内容,以递归方式),只需在命令行上将其作为附加参数传递即可。使用GNU tar,您可以使用--strip-components选项剥离开头的目录(通常使用来转换文件名--transform)。在非Linux系统上,您可以使用pax(它在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 !.*!!

5

假设您拥有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

我之所以选择后者,是因为赶时间,但是很高兴知道后者的存在。
xenoterracide 2010年

是否可以使用不需要显式命名已剥离组件(例如wordpress)的命令?当我解压GitHub创建的tarball时,需要这个,它在剥离的组件中包含git版本,而我事先不知道。
tjanez 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.