没有目录结构的 .tar 文件

42 compression unix tar

我正在.tar处理一些带有 path 的文件example/super_user/Output.*

结果.tar如下所示:

+ example
    + super_user
          - Output.zip
          - Output.xml
          - Output.txt
Run Code Online (Sandbox Code Playgroud)

但我希望文件如下所示:

- Output.zip
- Output.xml
- Output.txt
Run Code Online (Sandbox Code Playgroud)

你知道我如何在另一个目录中实现这一目标吗?

小智 40

如果目录“example”位于文件系统的根目录,这是另一种方式:

tar -C /example/super_user -cvf result.tar .
Run Code Online (Sandbox Code Playgroud)

这会将目录更改为您想要执行 tar 的点。需要注意的是,如果 /example/super_user 下有任何子目录,将保留这些子目录的目录结构。

  • 这就是手头问题的答案。在这种情况下,上述警告不是问题。所有其他答案都是解决问题的变通方法。 (3认同)
  • 应该注意的是,如果您需要添加分布在多个目录中的多个文件,但仍希望 tar 文件保持平坦,则可以在单个“tar”命令中多次使用“-C”。 (2认同)

小智 14

我已经在这里发布了我的答案:

/sf/ask/974739951/

转帖(懒人版)


这很丑陋......但它有效......

我有同样的问题,但有多个文件夹,我只想把每个文件都弄平。您可以使用选项“转换”来传递 sed 表达式,并且...它按预期工作。

这是表达式:

's/.*\///g' (删除'/'之前的所有内容)

这是最后的命令:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info
Run Code Online (Sandbox Code Playgroud)


Gaf*_*aff 12

tar 将保留文件和文件夹结构,因此我认为没有任何方法可以指示 tar 在创建时展平层次结构。

一种解决方法是临时更改目录,创建 tar,然后返回 - 下面是一个快速示例:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..
Run Code Online (Sandbox Code Playgroud)


小智 9

要使用目录 (DIR) 中的所有文件创建 tar (ARCHIVE.tar),没有任何父目录信息(甚至没有 ./),您可以使用以下内容:

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"
Run Code Online (Sandbox Code Playgroud)

您可以使用查找来限制深度、选择特定文件和许多其他内容。

祝你好运!