从 tar 存档中提取时覆盖文件

从 tar 存档中提取时覆盖文件

我玩 OpenTTD。有三个版本可用,我想同时拥有这三个版本:稳定版、测试版和夜间版。我下载并编译了这三个版本的源代码,没有任何问题。问题是当我想编译新版本时。当我将文件提取tar.xz/usr/lib/games/openttd-trunk/旧文件时,旧文件不会被覆盖。而是创建了一个名为 的新目录openttd-trunk-r26175

有没有办法将档案中的文件直接提取到/usr/lib/games/openttd-trunk/?这样我就可以轻松提取,make而不必./configure每次都这样做。

编辑:我认为我没有说清楚档案中的源文件位于一个名为的文件夹中openttd-trunk-r26175。我想要做的是从该文件夹中提取所有文件,而不是文件夹本身。

答案1

这个答案

如果您的档案有一个顶层文件夹,您可以使用--strip-components 1,从完整文件路径中删除第一个文件夹。

最后,这应该可以实现你想要的效果:

tar xf openttd-trunk-r26175.tar -C /usr/lib/games/openttd-trunk/ --strip-components 1

答案2

您可以使用--strip-componentstar 参数删除前导目录组件,并使用该-C选项指定结果文件的目标位置,例如

tar xvf openttd-trunk.tar.xz --strip-components=1 -C /usr/lib/games/openttd-trunk/

答案3

我认为我没有说清楚档案中的源文件位于一个名为 openttd-trunk-r26175 的文件夹中。我想要做的是从该文件夹中提取所有文件,而不是文件夹本身

我认为您可能想尝试一下dtrx提取器。

sudo apt-get install dtrx

在这种情况下,您提到的dtrx要求您决定做什么?摘自其手册页:

通常,如果档案只包含一个文件或目录,并且其名称与档案不匹配,dtrx 会询问您如何处理它。

          Extract the file/directory inside another directory named after the archive.  This is the default.

          Extract the file/directory in the current directory, and then rename it to match the name of the archive.

          Extract the file/directory in the current directory.

如果您需要,它还可以-o选择覆盖现有目录。因此您需要的命令可能是:

dtrx -o --one rename openttd-trunk.tar.xz

(当然这也可以通过其他方式实现,但是dtrx这是一个方便的程序,所以您可能想尝试一下。)

相关内容