我丢失了我编写的 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
同样的原因rm
,cp
以及许多其他实用程序不这样做——从早期开始,POSIX 设计理念一直是假设控制台的人知道他们在做什么,并且不会要求澄清,除非有一个说明。实际问题。
对于 的情况tar
,查看手册页建议您可以尝试设置TAR_OPTIONS
env 变量以包含该--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