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

voi*_*ter 5 command-line tar gnu

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

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

感谢您的时间!

Sha*_*dur 10

同样的原因rmcp还有一大堆其他实用程序没有——从早期开始,POSIX 设计概念一直假设控制台上的人知道他们在做什么,除非有问题,否则不会要求澄清实际问题。

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

  • 不幸的是,`--confirmation` 有点 * 太* 安全。它在提取每个文件之前询问它是否已经存在。更糟糕的是,它不会告诉您文件是否已经存在。 (7认同)
  • 也许可以使用“--keep-newer-files”、“--keep-old-files”等替代方案? (2认同)

小智 9

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