如何强制cp覆盖而不确认

我试图使用cp命令并强制覆盖。

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

你可以做yes | cp -rf xxx yyy yes | cp -rf xxx yyy ,但是我的感觉就是说如果你以root身份执行它,你的.bashrc或者.profile具有cp -i的别名,大多数现代系统都会这样做。

您可以通过在命令提示符处运行alias来检查现有的别名,或者可以使用which cp来检查仅用于cp别名。

如果你确定了一个别名,那么运行unalias cp会取消当前会话,否则你可以从shellconfiguration文件中删除它。

你可以暂时绕过一个别名,使用命令的非别名版本作为前缀,例如\cp whatever

这可能是由于cp已经被别名为cp -i类的东西造成的。 直接调用cp应该可以工作:

 /bin/cp -rf /zzz/zzz/* /xxx/xxx 

解决这个问题的另一种方法是使用yes命令:

 yes | cp -rf /zzz/zzz/* /xxx/xxx 

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

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

反斜杠将暂时禁用您称为cp所有别名。

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

请参阅cp联机帮助页 :只有当指定了-i参数时, cp才会在覆盖前实际提示。

你可以通过alias命令来检查:

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

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

 $ unalias cp -i 

正如其他答案所述,如果cpcp -i的别名,则可能会发生这种情况。

您可以在cp命令之前附加一个\ ,以便在没有别名的情况下使用它。

 \cp -fR source target 

默认情况下, cp具有别名到cp -i 。 你可以检查它,inputalias ,你可以看到一些像:

 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

cp通常是这样的别名

 alias cp='cp -i' # ie ask questions of overwriting 

如果你确定你想要覆盖然后使用这个:

 /bin/cp <arguments here> src dest 

你也可以使用这个命令:

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

它会更新您现有的文件,但新的一个。

调用没有别名的命令的另一种方法是在bash中使用command builtin。

command cp -rf /zzz/zzz/*

-n是“不要覆盖”,但他的问题与你所回答的完全相反。

为了避免这种确认,你可以简单的运行带有绝对path的cp命令,它将避免别名。

/ bin / cp源文件目标

如果你想保持在全球层面的别名,只是想改变你的脚本。

只要使用:

别名cp = cp

然后写下你的后续命令。

我只是使用unalias去除“cp -i”别名,然后执行复制,然后设置别名。 :

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

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

 alias |grep cp 

这不是cp -i 。 如果你不想被要求确认,那就是cp -n ; 例如:

 cp -n src dest 

或者如果目录/文件夹是:

 cp -nr src_dir dest_dir