原始 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 会将目录名包含在存档中。