如何将文件解压到“/usr”目录而不覆盖其他文件?

如何将文件解压到“/usr”目录而不覆盖其他文件?

我下载swift安装包,并将其解压到我的主目录中:

# tar -C / -xvf swift-2.2.1-RELEASE-ubuntu14.04.tar.gz
swift-2.2.1-RELEASE-ubuntu14.04/usr/
swift-2.2.1-RELEASE-ubuntu14.04/usr/include/
swift-2.2.1-RELEASE-ubuntu14.04/usr/include/lldb/
......

最终的swift-2.2.1-RELEASE-ubuntu14.04布局是这样的:

# tree -d -L 2
.
└── usr
    ├── bin
    ├── include
    ├── lib
    └── share

5 directories

我想直接将文件解压到/usr目录中而不覆盖其他文件,有什么方法吗?

答案1

除非它是供应商提供的与操作系统包管理器集成的包,否则您不应将其提取到该位置。请前往/选择例如,将其提取到那里并设置环境变量,如上所示下载页面对于斯威夫特。通过进行完全提取/选择,这是针对第三方应用程序的,您还可以通过更改环境变量来快速切换版本。

答案2

提取文件时,如果 tar 发现提取的文件已经存在,它通常会在提取文件之前删除该文件来替换该文件,以防止存在硬链接或符号链接时出现混淆。 (如果现有文件是符号链接,则将其删除,而不是跟踪。)但是,如果目录因非空而无法删除,则 tar 通常会覆盖其元数据(所有权、权限等)。该--overwrite-dir选项启用此默认行为。要更加谨慎并保留此类目录的元数据,请使用该--no-overwrite-dir选项。

要更加谨慎并防止现有文件被替换,请使用该--keep-old-files (-k)选项。它会导致 tar 拒绝替换或更新已存在的文件,即与存档成员同名的文件会阻止提取该存档成员。相反,它会报告错误。例如:

$ ls
blues
$ tar -x -k -f archive.tar
tar: blues: Cannot open: File exists
tar: Exiting with failure status due to previous errors

相关内容