tar – 提取丢弃目录结构

tar – 提取丢弃目录结构

unzip有一个漂亮的选项-j,通过该选项,档案的目录结构被丢弃,并且所有文件被提取到同一个目录中。

有没有办法tar以同样的方式工作?手册页中似乎没有提到这一点。

那么,有没有一种替代的、最好是免费软件的工具可以做到这一点?

答案1

GNU tar 依赖于功能,因此自然也有一些选项。
http://www.gnu.org/software/tar/manual/html_node/transform.html

如果您只想删除一些路径段,那么--strip-components=n--strip=n通常会这样做:

 tar xvzf tgz --strip=1

但是也可以用正则表达式重写要提取的文件(标志是--transform--xform并接受带有/x修饰符的 ereg):

 tar xvzf tgz --xform='s#^[^/]+#.#x'
                 # or 's#^.+/##x' for discarding all paths

为了列出 tar,您需要附加--show-transformed选项:

 tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'

我相信重写选项也适用于打包,而不仅仅是提取。但pax显然语法更好。

答案2

只需两步即可轻松完成。根据需要进行调整:

$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree

答案3

pax可以做到:

pax -v -r -s '/.*\///p' < archive.tar

或者

zcat archive.tar.gz | pax -v -r -s '/.*\///p'

您可以通过省略该选项来首先检查名称替换操作-r

答案4

tar xf foo.tar.gz foo/path/to/file/bar.mp3 -O > bar.mp3

-O选项将文件提取到标准输出,并将>该输出重定向到文件。因此,在我的示例中,我提取了 foo.mp3 并将其重定向到 bar.mp3。文件名是任意的。

相关内容