我正在尝试运行一些输入tar文件的基准测试。
现在tar文件中有一个runme.sh,需要修改,文件夹必须再次成为.tar。
原始基准测试有效,但修改后的基准测试不起作用。我认为这是文件格式的问题。
注意:我的修改不会产生问题。如果我只是解压缩工作的tar并且没有修改就再次tar它,它就不起作用了。令人惊讶的是,新文件的大小发生了变化。
我尝试了什么:
答案 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将在归档中包含目录名称。