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

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


当前回答

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

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

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

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

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

$ unalias cp

其他回答

默认情况下,cp的别名为cp-i。您可以检查它,键入别名,然后可以看到类似的内容:

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

要解决这个问题,只需使用/bin/cp/from/To命令,而不是cp/from_To命令

如果这是一个小文本文件,您也可以这样考虑:

cat my.cnf > /etc/my.cnf

不确定大型或二进制文件的效率或副作用。

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

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

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

我只是使用unalias删除“cp-I”别名,然后进行复制,然后设置回别名。:

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

不是最漂亮的代码,但易于设置和高效。我还检查了别名是否已经用简单的

alias |grep cp

另一种不使用别名调用命令的方法是使用bash中内置的命令。

命令cp-rf/zzz/zzz/*