控制 tar 存档中存储的文件名

控制 tar 存档中存储的文件名

我想制作一个 tar 存档,其中包含分散在文件系统中的各种文件:

$ tar czvf outfile.tar.gz /some/file /some/other/filename

这成功创建了存档,但是当我提取它时,文件仍然位于与原始位置匹配的目录树中:

$ tar xvf outfile.tar.gz
some/file
some/other/filename

我希望将它们都提取到当前目录,以便filefilename自行创建。

我可以在提取时使用 执行此操作--transform,例如:

$ tar xvf outfile.tar.gz --transform=s,.*/,,

这满足了我的要求,但是在提取时必须使用晦涩的选项有点烦人,使得发送给其他人变得更加困难,等等。

我可以在创建时这样做:

$ cd tmpdir
$ cp /some/file /some/other/filename .
$ tar czvf outfile.tar.gz *

但这似乎有点重量级,特别是当文件很大或很多时。

有没有办法直接控制tar创建时存储的文件名?

答案1

--transform那么创建存档时不起作用吗?它似乎适用于我的 GNU tar 1.27.1:

$ tar czf out.tar.gz some/foo some/other/bar --transform=s,.*/,,
$ tar tzf out.tar.gz 
foo
bar

如果它不起作用,另一种可能性是链接到当前目录中的文件(就像您对 所做的那样cp,但使​​用ln):

$ ln /some/foo /some/other/bar .
$ tar czf out.tar.gz foo bar

答案2

有一个非常有用的工具,叫做迟迟可用于编辑tar文件:

tardy -Remove_Prefix 55 outfile.tar.gz transformed.tar.gz

55是大于 中所有目录的最大深度的任意数字outfile.tar.gz-Remove_Prefix 55告诉tardy从文件名中删除(最多)55 个前导目录。

相关内容