.tar文件,没有目录结构


32

我正在.tar使用path文件example/super_user/Output.*

结果.tar看起来像这样:

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

但我希望文件如下所示:

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

您知道我仍然可以在另一个目录中时如何实现吗?


确保避免使用带有此类档案的炸弹
grawity 2014年

tar --strip-components = 1000吗?
Zaar Hai

Answers:


11

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

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

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

27

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

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

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


1
这是解决当前问题的答案。在这种情况下,提到的警告不是问题。所有其他答案都是解决此问题的变通办法。
joki

这确实是解决这个问题的方法。目录不必是根目录,假设目录结构/home/u/foo/bar,工作目录为/home/b,则tar -C foo/bar -cvf qiz.tar .可以正常工作。需要注意的是,您不能使用通配符,即tar -C foo/bar -cvf qiz.tar *.logtar -C foo/bar -cvf qiz.tar "*.log"否则tar -C foo/bar -cvf qiz.tar "foo/bar/*.log"将无法使用。
布莱斯

1
应当指出,如果需要添加散布在多个目录中的多个文件,但仍希望tar文件是平坦的,则可以-C在单个tar命令中使用多次。
zero298

10

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

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

重新发布(适用于懒惰的ppl)


这很丑...但是行得通...

我有同样的问题,但是有多个文件夹,我只想整理每个文件。您可以使用选项“ transform”来传递sed表达式,并且...可以按预期工作。

这是表达式:

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

这是最终命令:

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


7

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

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"

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

祝好运!


我在OSX find命令中得到“查找:-printf:未知的主对象或运算符”。有小费吗?
TCB13

-printf是非标准命令。其中许多仅适用于特定版本的find。通常,在回答有关超级用户的问题时,我们会将其标记出来(例如,“-blah是Gnu扩展名,将无法在所有地方使用”)。
Hennes 2014年

3

我创建了一个临时目录。在目录中,创建了指向所有文件到要包含的文件的符号链接。然后我做了tar -h -C。这样所有文件(不是链接,而是它们的内容)都以所需的名称包含在存档中。



1

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

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

这样做的好处是,完成该块后,您将始终隐式弹出回到原始目录。即不需要pushd.. popd块或跟踪cd返回的位置。


0
pushd example/super_user
tar -cf output.tar Output.*
popd

pushd将当前目录路径推送到DIR堆栈,然后移动到内容文件夹。然后,您使用返回到原始目录popd

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.