为什么 cp 的选项是不覆盖名为 --no-clobber 的文件?

TZu*_*iri 23 gnu cp coreutils history user-interface

cp 是一个非常流行的 Linux 工具,由 GNU 基金会的 coreutils 团队维护。

默认情况下,具有相同名称的文件将被覆盖,如果用户想要更改此行为,他们可以添加--no-clobber到他们的复制命令中:

   -n, --no-clobber
          do not overwrite an existing file (overrides a previous -i option)
Run Code Online (Sandbox Code Playgroud)

为什么不是这样的--no-overwrite

Gil*_*il' 48

数据操作上下文中的“ Clobber ”意味着通过覆盖数据来破坏数据。在 Unix 环境中的文件上下文中,这个词至少可以追溯到 1980 年代早期,可能更早。Csh必须set noclobber配置>为拒绝覆盖现有文件(后来set -o noclobber在 ksh93 和其他 sh 样式的 shell 中)。当GNU coreutils 添加 --no-clobber(在 2009 年)时,它们使用的词汇与 shell 使用的词汇相同。

  • 快速查看 Diomidis Spinellis 档案中的源代码,发现 [`noclobber` 位于 1979 年 2BSD 的 C shell 中](https://github.com/dspinellis/unix-history-repo/blob/BSD-2-Snapshot -Development/src/csh/sh.sem.c#L266),所以人们必须找出 Bill Joy 从哪里得到这个词。 (4认同)
  • C shell 在 1980 年代就有它,至少有一个同时代的消息来源哀叹它不在当时的 Korn shell 中。(-: 它记录在 Andersons 的 _The UNIX C shell field guide_ 中,该指南由 Prentice Hall 于 1986 年出版 (ISBN 9780139374685),因此可能在此之前已经存在一段时间了。 (3认同)
  • 总是想知道 'clobber' 的灵感是否来自神奇四侠中的东西,a la 'It's clobberin' time!' (3认同)

ter*_*don 27

因为这实际上是一个标准术语。正如维基百科中所解释的:

在软件工程中,破坏文件或计算机内存就是覆盖其内容。行话文件将 clobbering 定义为

覆盖,通常是无意的:“我走出了数组的末尾并破坏了堆栈。” 比较绿色、涂鸦、垃圾和粉碎堆栈。

正如在同一页面上所提到的,bash 和其他 shell 也在它们的set -o noclobber或等价物中使用该术语。这只是此类事情的标准术语,因此对于cp.