【问题标题】:Structure of .tar files.tar 文件的结构
【发布时间】:2016-08-16 14:54:20
【问题描述】:

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

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

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

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

我尝试了什么:

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

  2. 尝试运行命令tar cvf folder_name.tar folder_name/ 不工作。

什么有效:

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

它如何与 GUI 配合使用的屏幕截图:

【问题讨论】:

    标签: linux tar


    【解决方案1】:

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

    您如何测试“如果我只是解压缩工作的 tar 并再次对其进行 tar 而不进行修改,它就不起作用。”在 GUI 中还是在 shell 中?如果在 shell 中 - 你使用什么确切的命令?

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

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

    如果您有/需要一个 没有顶级目录的 tarball,以下内容应该可以在 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 会将目录名包含在存档中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多