没有目录结构的 .tar 文件

没有目录结构的 .tar 文件

我正在.tar处理一些路径为 的文件example/super_user/Output.*

结果.tar如下:

+ example
    + super_user
          - Output.zip
          - Output.xml
          - Output.txt

但我希望文件如下所示:

- Output.zip
- Output.xml
- Output.txt

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

答案1

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

一种解决方法是暂时更改目录,创建 tar,然后返回 - 下面是一个简单的示例:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..

答案2

如果目录“example”位于文件系统的根目录,则可以使用另一种方法:

tar -C /example/super_user -cvf result.tar .

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

答案3

我已在此处发布了我的答案:

https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure

转发(适合懒人)


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

我遇到了同样的问题,但是有多个文件夹,我只想将所有文件都平铺。您可以使用选项“transform”传递 sed 表达式,然后...它会按预期工作。

这是表达式:

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

这是最终的命令:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info

答案4

临时更改目录的另一种方法是将cdtar命令放在括号内( )

    (cd example/super_user; tar -cvf ../../result.tar *)

这样做的好处是,当块完成后,您将始终隐式返回到原始目录。另一个好处是,*在这种情况下使用通配符将匹配临时目录中的文件名。即不需要pushd..popd块或跟踪cd返回的位置。

除了上述命令之外,还有一个特殊cd -命令可以切换/撤消上次更改目录,例如

    cd example/super_user # change to a subdirectory
    tar -cvf ../../result.tar *
    cd - # undoes the change to the subdirectory

相关内容