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

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


当前回答

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

cat my.cnf > /etc/my.cnf

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

其他回答

cp -u ...
cp --update ...

同样有效。

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

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

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

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

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

$ unalias cp

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

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

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

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

它不是cp-i。如果您不想被要求确认,它是cp-n;例如:

cp -n src dest

或者在目录/文件夹的情况下:

cp -nr src_dir dest_dir

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

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

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

alias |grep cp