.tar文件的结构

时间:2016-08-15 09:02:26

标签: linux tar

我正在尝试运行一些输入tar文件的基准测试。

现在tar文件中有一个runme.sh,需要修改,文件夹必须再次成为.tar。

原始基准测试有效,但修改后的基准测试不起作用。我认为这是文件格式的问题。

注意:我的修改不会产生问题。如果我只是解压缩工作的tar并且没有修改就再次tar它,它就不起作用了。令人惊讶的是,新文件的大小发生了变化。

我尝试了什么:

    工作和非工作tar文件的
  1. file命令。 两者都返回了相同的POSIX tar archive

  2. 试图运行命令tar cvf folder_name.tar folder_name/ 不起作用。

  3. 什么有效:

    我在Ubuntu(14.04)上,我双击tar,直接编辑了我想要的文件并更新了它。这有效,但不是一个可行的解决方案,因为我有大量的文件,我想编写一个脚本来自动化它。

    如何使用GUI的屏幕截图:

    enter image description here

1 个答案:

答案 0 :(得分:2)

原始tar文件是否包含顶级目录名称?从截图中看起来不像。如果您使用顶级目录重新创建tar文件,如您尝试的事项中的第2点所示,结构将不同,并且无论程序尝试使用tar文件将无法解析它。

你如何测试“如果我只是解压缩工作的tar并且不经过修改就重新开始tar,那就不行了。”在GUI或shell中?如果在shell中 - 你使用了什么确切的命令?

在shell中,您可以使用命令tar -tf filename.tar获取tarball的内容。如果它列出的所有文件都以相同的文件夹名称开头,则tarball包含一个顶级目录。如果它只列出了各种文件和子目录,则不会。 (Tarballs不是令人憎恶的,但如果你使用它们的任何东西需要它,你只需要应付。)

我猜测如果你在原始tar文件和修改后的非工作tar文件上执行此操作,结果会有所不同。

如果你需要一个tarball 没有一个toplevel目录,那么以下内容应该在shell中工作:

$ mkdir workdir
$ cd workdir
$ tar -xf ../tarball.tar
<edit your file however you like>
$ tar -cf ../tarball-new.tar *
$ cd ..
$ rm -r workdir

如果你有/需要一个tarball 一个顶级目录,以下内容就足够了:

$ tar -xf ../tarball.tar
$ cd toplevel_directory
<edit your file however you like>
$ cd ..
$ tar -cf tarball-new.tar toplevel_directory
$ rm -r toplevel_directory

编辑:我很高兴它适合您。当然,重点是tar包含它存储的文件的路径,而不仅仅是文件名。因此,如果您需要一个平面文件列表,则需要在包含这些文件的目录中运行tar,并将所有文件作为tar的参数。如果您尝试使用上升级别的快捷方式并仅指定要打包的目录名称,则tar将在归档中包含目录名称。