787

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

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

4

17 回答 17

1287

您可以这样做yes | cp -rf xxx yyy,但我的直觉是,如果您以 root 身份执行此操作 - 您的.bashrc.profile具有cpto的别名cp -i,大多数现代系统(主要是 RH 衍生物)都会对 root 配置文件执行此操作。

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

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

您可以暂时绕过别名并通过使用前缀来使用命令的非别名版本\,例如\cp whatever

于 2011-12-13T11:20:39.130 回答
379

这可能是由于cp已经别名为cp -i. 直接调用cp应该可以:

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

解决此问题的另一种方法是使用以下yes命令:

yes | cp -rf /zzz/zzz/* /xxx/xxx
于 2011-12-13T11:20:41.487 回答
144

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

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

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

于 2011-12-13T11:30:28.220 回答
81

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

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

您可以通过以下alias命令进行检查:

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

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

$ unalias cp
于 2011-12-13T11:19:56.543 回答
60

正如其他答案所述,如果cpcp -i.

\您可以在命令前附加 a 以在cp没有别名的情况下使用它。

\cp -fR source target
于 2016-07-29T02:19:26.127 回答
21

所以我经常遇到这种情况,因为我将 cp 别名为cp -iv,并且我发现了一个巧妙的技巧。事实证明,虽然-i两者-n都取消了先前的覆盖指令,-f但没有。但是,如果您使用-nf它会添加清除-i. 所以:

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

很整洁吧?/死灵贴

于 2020-02-17T20:20:27.817 回答
20

默认情况下cp,别名为cp -i. 你可以检查它,输入alias,你可以看到一些像:

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

于 2013-05-13T07:05:45.777 回答
9

你也可以使用这个命令:

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

它会用较新的文件更新您现有的文件。

于 2014-05-19T09:28:16.277 回答
9

cp通常是这样的别名

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

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

/bin/cp <arguments here> src dest
于 2015-06-22T06:36:52.347 回答
8

我找到了这个

'cp' -rf * /data/danalonso_testing/target/

来源:https ://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851

于 2018-11-13T13:59:24.913 回答
7

对我来说最简单的方法:

yes | cp source destination
于 2021-10-21T06:39:12.903 回答
6

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

command cp -rf /zzz/zzz/*

于 2014-07-10T18:34:59.150 回答
6
cp -u ...
cp --update ...

也有效。

于 2018-04-13T11:39:23.743 回答
4

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

为了避免这种确认,您可以简单地使用绝对路径运行 cp 命令,它将避免别名。

/bin/cp 源文件目标

于 2017-04-20T16:03:46.217 回答
2

如果您想将别名保持在全局级别,并且只想为您的脚本进行更改。

只需使用:

别名 cp=cp

然后写下你的后续命令。

于 2017-08-11T07:29:08.040 回答
0

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

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

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

alias |grep cp
于 2016-07-25T10:11:49.187 回答
-2

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

cp -n src dest

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

cp -nr src_dir dest_dir
于 2016-04-19T12:41:22.107 回答