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

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


当前回答

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

cp -n src dest

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

cp -nr src_dir dest_dir

其他回答

默认情况下,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命令

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

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

很整洁啊/尸体解剖所

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

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

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

这可能是由于cp已经别名为类似cp-i的内容所致。直接调用cp应该可以:

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

另一种解决方法是使用yes命令:

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

正如其他答案所指出的,如果cp是cp-i的别名,这可能会发生。

您可以在cp命令之前附加一个\,以使用它而不使用别名。

\cp -fR source target