为什么 tar 在覆盖现有文件之前不询问?

为什么 tar 在覆盖现有文件之前不询问?

我丢失了我编写的 Vim 插件的几百行,并且经常继续备份,因为我提取了tar包含旧版本的文件。当我编写插件时,我决定不使用源代码控制管理,因为我只是定期更新它。

tar为什么默认情况下在覆盖现有文件之前不询问?我猜测默认行为是默默地覆盖文件背后有一些基本原理,因为我们通常希望安全而不是速度和便利。例如,我们通常使用#ifdef NDEBUG, 而不是#ifdef DEBUG;同样,我希望tar在覆盖任何文件之前询问我,并且它有一些标志,我可以用它来告诉它覆盖文件而不询问我。另外,如何才能做到tar默认情况下询问我,而不必给它任何标志?tar如果它们支持这种更安全的默认行为,我可以使用除 之外的工具。

感谢您的时间!

答案1

tar -k选项要求确认文件是否已存在。您可以通过将其添加到TAR_OPTIONS变量 ( TAR_OPTIONS="$TAR_OPTIONS -k") 或创建别名 ( )来默认设置它alias tar="tar -k"

答案2

同样的原因rmcp以及许多其他实用程序不这样做——从早期开始,POSIX 设计理念一直是假设控制台的人知道他们在做什么,并且不会要求澄清,除非有一个说明。实际问题。

对于 的情况tar,查看手册页建议您可以尝试设置TAR_OPTIONSenv 变量以包含该--confirmation标志。

答案3

不是您所要求的,但您可以使用--backup=simple选项,该选项将附加~到将被覆盖的所有原始文件的文件名中。

并遵循 @thinker25 的建议,使用默认TAR_OPTIONS情况alias下即可工作。

这是演示tar --backup=simple

$ ls
hello.txt  my.tar
$ tar --backup=simple --extract -f my.tar
$ ls
hello.txt  hello.txt~  my.tar

相关内容