![从 tar 存档中提取时覆盖文件](https://linux22.com/image/971268/%E4%BB%8E%20tar%20%E5%AD%98%E6%A1%A3%E4%B8%AD%E6%8F%90%E5%8F%96%E6%97%B6%E8%A6%86%E7%9B%96%E6%96%87%E4%BB%B6.png)
我玩 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-components
tar 参数删除前导目录组件,并使用该-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
这是一个方便的程序,所以您可能想尝试一下。)