我正在尝试使用cp命令并强制覆盖。

我尝试过cp-rf/foo/*/bar,但仍然会提示我确认每个覆盖。


当前回答

所以我经常遇到这种情况,因为我将cp别名改为cp-iv,我发现了一个很好的技巧。事实证明,尽管-i和-n都取消了以前的覆盖指令,但-f没有。然而,如果您使用-nf,它将增加清除-i的能力。因此:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt

很整洁啊/尸体解剖所

其他回答

您可能在某处有一个别名,将cp映射到cp-i;因为使用默认设置,cp不会要求覆盖。检查你的.bashrc,你的个人资料等。

请参阅cp手册页:只有在指定-i参数时,cp才会在覆盖之前实际提示。

您可以通过别名命令进行检查:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

要取消定义别名,请使用:

$ unalias cp

也可以使用此命令:

cp-ru/zzz/zzz/*/xxx/xxx

它会用新文件更新现有文件。

你可以做yes | cp-rf xxx yyy,但我的gutfeeling说,如果你以root身份做,你的.bashrc或.profile有一个cp到cp-i的别名,大多数现代系统(主要是RH衍生产品)都是这样做的。

您可以通过在命令提示符下运行alias来检查现有别名,或者只检查cp的别名。

如果您确实定义了别名,运行unalias cp将取消当前会话的别名,否则您可以将其从shell配置文件中删除。

您可以暂时绕过别名并使用命令的非别名版本,方法是在命令前面加上\,例如\cp whatever

cp通常是这样的别名

alias cp='cp -i'   # i.e. ask questions of overwriting

如果确定要进行覆盖,请使用以下命令:

/bin/cp <arguments here> src dest

正如其他一些答案所指出的,您可能在某个地方使用了将cp映射到cp-i或类似的别名。通过在命令前面加一个反斜杠,可以运行没有任何别名的命令。在你的情况下,尝试

\cp -r /zzz/zzz/* /xxx/xxx

反斜杠将暂时禁用您调用的任何别名。