.tar 文件的结构
Structure of .tar files
我正在尝试 运行 一些基准测试,这些基准输入 tar 文件。
现在 tar 文件中有一个 runme.sh 需要修改,并且文件夹必须再次成为 .tar。
原始基准测试有效,但修改后的基准测试无效。我认为这是文件格式的问题。
注意:我的修改没有造成问题。如果我只是在不修改的情况下再次解压正在工作的 tar 和 tar,它就不起作用。令人惊讶的是,新文件的大小发生了变化。
我尝试了什么:
file
命令用于工作和非工作 tar 文件。
两者返回相同 POSIX tar archive
试图运行命令tar cvf folder_name.tar folder_name/
无效。
什么有效:
我在Ubuntu (14.04) 双击tar,直接编辑了我想要的文件并更新了。这可行,但不是一个可行的解决方案,因为我有大量文件并且我想编写一个脚本来自动化它。
如何使用 GUI 的屏幕截图:
原始tar文件是否包含顶级目录名称?从你的截图看不像。如果您重新创建具有顶级目录的 tar 文件,如您尝试的第 2 点所示,结构将不一样,并且任何程序试图使用 tar 文件将无法解析它。
如何在 GUI 或 shell 中测试 "If I just uncompress the working tar and tar it again without modification, it does not work."?如果在 shell 中 - 您具体使用什么命令?
在shell中,您可以使用命令tar -tf filename.tar
获取tar球的内容。如果它列出的所有文件 starts 都具有相同的文件夹名称,则您的 tarball 包含顶级目录。如果它只是列出各种文件和子目录,则不会。 (不是可憎的 Tarball,但如果您使用它们的目的需要它,您将不得不应付。)
我猜如果您对原始 tar 文件和修改后的非工作 tar 文件执行此操作,结果会有所不同。
如果您 have/need 一个 tar 球 没有 顶级目录,则以下内容应该在 shell 中工作:
$ mkdir workdir
$ cd workdir
$ tar -xf ../tarball.tar
<edit your file however you like>
$ tar -cf ../tarball-new.tar *
$ cd ..
$ rm -r workdir
如果你 have/need 一个 tar 球 和 一个顶层目录,以下应该足够了:
$ 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 将在存档中包含目录名称。
我正在尝试 运行 一些基准测试,这些基准输入 tar 文件。
现在 tar 文件中有一个 runme.sh 需要修改,并且文件夹必须再次成为 .tar。
原始基准测试有效,但修改后的基准测试无效。我认为这是文件格式的问题。
注意:我的修改没有造成问题。如果我只是在不修改的情况下再次解压正在工作的 tar 和 tar,它就不起作用。令人惊讶的是,新文件的大小发生了变化。
我尝试了什么:
file
命令用于工作和非工作 tar 文件。 两者返回相同POSIX tar archive
试图运行命令
tar cvf folder_name.tar folder_name/
无效。
什么有效:
我在Ubuntu (14.04) 双击tar,直接编辑了我想要的文件并更新了。这可行,但不是一个可行的解决方案,因为我有大量文件并且我想编写一个脚本来自动化它。
如何使用 GUI 的屏幕截图:
原始tar文件是否包含顶级目录名称?从你的截图看不像。如果您重新创建具有顶级目录的 tar 文件,如您尝试的第 2 点所示,结构将不一样,并且任何程序试图使用 tar 文件将无法解析它。
如何在 GUI 或 shell 中测试 "If I just uncompress the working tar and tar it again without modification, it does not work."?如果在 shell 中 - 您具体使用什么命令?
在shell中,您可以使用命令tar -tf filename.tar
获取tar球的内容。如果它列出的所有文件 starts 都具有相同的文件夹名称,则您的 tarball 包含顶级目录。如果它只是列出各种文件和子目录,则不会。 (不是可憎的 Tarball,但如果您使用它们的目的需要它,您将不得不应付。)
我猜如果您对原始 tar 文件和修改后的非工作 tar 文件执行此操作,结果会有所不同。
如果您 have/need 一个 tar 球 没有 顶级目录,则以下内容应该在 shell 中工作:
$ mkdir workdir
$ cd workdir
$ tar -xf ../tarball.tar
<edit your file however you like>
$ tar -cf ../tarball-new.tar *
$ cd ..
$ rm -r workdir
如果你 have/need 一个 tar 球 和 一个顶层目录,以下应该足够了:
$ 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 将在存档中包含目录名称。