Linux 如何在没有确认的情况下强制cp覆盖

Linux 如何在没有确认的情况下强制cp覆盖,linux,command-line,overwrite,cp,Linux,Command Line,Overwrite,Cp,我试图使用cp命令强制覆盖 我尝试了cp-rf/foo/*/bar,但仍会提示我确认每次覆盖。您可能在某个地方有一个别名,将cp映射到cp-I;因为使用默认设置,cp不会要求覆盖。检查您的.bashrc、您的.profile等 请参阅:仅当指定了-i参数时,cp才会在覆盖之前实际提示 您可以通过alias命令来检查这一点: $ alias alias cp='cp -i' alias diff='diff -u' .... yes | cp -rf /zzz/zzz/* /xxx/xxx 要

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


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

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

请参阅:仅当指定了
-i
参数时,
cp
才会在覆盖之前实际提示

您可以通过
alias
命令来检查这一点:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....
yes | cp -rf /zzz/zzz/* /xxx/xxx
要取消定义别名,请使用:

$ unalias cp

你可以做
yes | cp-rf xxx yyy
,但我的直觉告诉我,如果你做根目录,你的
。bashrc
。profile
的别名是
cp
cp-i
,大多数现代系统(主要是RH衍生产品)都是这样做的

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

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


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

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

/bin/cp -rf /zzz/zzz/* /xxx/xxx
另一种解决方法是使用
yes
命令:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....
yes | cp -rf /zzz/zzz/* /xxx/xxx

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

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

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

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

您也可以使用此命令:

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


不过,它会用较新的文件更新现有文件。

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


命令cp-rf/zzz/zzz/*
cp
的别名通常如下

alias cp='cp -i'   # i.e. ask questions of overwriting
如果确定要进行覆盖,请使用以下方法:

/bin/cp <arguments here> src dest
/bin/cp src dest

它不是
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

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

您可以在
cp
命令之前附加
\
,以便在不使用别名的情况下使用它

\cp -fR source target
-n是“不覆盖”,但他的问题与你的回答完全相反

要避免此确认,只需使用绝对路径运行cp命令,它将避免别名


/bin/cp sourcefile destination

如果您希望保持alias在全局级别上的原样,并且只想更改脚本

只需使用:

别名cp=cp

然后编写后续命令

cp -u ...
cp --update ...
同样有效。

我找到了这个

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

来源:

所以我经常遇到这个问题,因为我将cp别名保持为
cp-iv
,我发现了一个巧妙的技巧。事实证明,虽然
-i
-n
都会取消以前的覆盖指令,但
-f
不会。但是,如果使用
-nf
,它会增加清除
-i
的功能。因此:

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

cp-f/foo/*/bar是的,我做了unalias cp-I,现在它工作了。。感谢您宝贵的回复。我喜欢unix提供的
yes
命令。令人捧腹的有一天我可能会使用它。是的,它有别名,很好的捕获:)您可以使用\cp调用原始cp,比记住路径/bin/cpYep更容易,这是另一种绕过别名的方法。有点干净利落!这样更安全。是的,我做了unalias cp-I,现在它工作了。。感谢您宝贵的回复。这只是“unalias cp”,如果您使用的是oh my zsh,那么cp-i别名可能来自常见别名。因此,请小心--即使别名不是直接用.bashrc编写的,如果此文件调用的任何其他内容最终调用了其他操作cp别名的内容,您也会遇到这种行为。通过“现代系统”他指的是RHEL/centos/fedora,或许还有其他的东西,Debian/Ubuntu没有别名cp。我更喜欢服务器上的RHEL,并使用fedora近十年,但在Nvidia杀死我的fedora安装后,Ubuntu的社区支持和切换回Gnome吸引了我。我是
”\_(ツ)_/“
关于它。@RayFoss添加了一个
(主要是RH衍生物)
备注:)执行
unalias cp
并复制您需要复制的任何内容后,您可以通过执行
alias cp='cp-i'
将alias设置回其默认值。然后,运行
alias cp
,以便您可以验证它是否返回到默认alias。@zhouji如我的回答中所述,反冲会禁用别名。因此,不要调用alias
cp
\cp
将调用命令
cp
。这似乎相当于运行
命令cp
。其他人表示,系统将面向cp的用户符号链接到
cp-i
,这意味着他们试图克服默认设置