linux cp 不要确认,关于Linux:如何在不确认的情况下强制CP覆盖

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

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

你可以做yes | cp -rf xxx yyy,但我的直觉告诉你,如果你把它作为根-你的.bashrc或.profile有一个cp到cp -i的别名,大多数现代系统(主要是rh衍生物)都会对根配置文件这样做。

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

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

您可以临时绕过别名,并使用命令的非别名版本,方法是将它与\前缀,例如\cp whatever前缀。

Favoretti-你太棒了!它起作用了。:-)当我检查alias时,它列出了alias cp='cp-i',正如您建议我使用unalias cp一样。现在我可以复制任何promotor。帮了大忙,伙计。谢谢你。-)

另外,要小心——即使别名不是直接写在.bashrc中,如果这个文件调用的其他任何东西最终调用了其他一些操作cp别名的东西,您也会遇到这种情况。

令人惊叹的!谢谢:

我使用Linux已经10多年了,但在这种情况下,我从来没有意识到` to unalias. I used to use full path; like/usr/bin/cp'。非常感谢。

"现代系统"的意思是rhel/centos/fedora,也许还有其他的意思,debian/ubuntu并没有化名cp。我更喜欢服务器上的rhel,使用fedora将近十年,但是在Nvidia杀死了我的fedora安装之后,ubuntu的社区支持和切换回gnome的做法吸引了我。我是¯\_(ツ)_/¯的人。

@Rayfoss补充了一句(primarily RH-derivatives)的评论:

太棒了,谢谢。

在执行unalias cp并复制需要复制的内容之后,可以通过执行alias cp='cp -i'将别名设置回其默认值。之后,运行alias cp,这样您就可以验证它是否返回到默认别名。

这可能是由于cp已经被命名为类似cp -i的名称。直接呼叫cp应该可以工作:

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

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

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

是的,我做过联合国艾滋病规划署的CP-I,现在开始工作了。感谢您宝贵的答复。

我喜欢Unix提供yes命令。令人捧腹的。总有一天我会用到它。

是的,它是别名,很好捕获:)您可以使用cp来调用原始cp,这比记住路径/bin/cp更容易。

是的,这是绕过别名的另一种方法。有点干净利落!

这样更安全。

这应该是公认的答案。

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

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

反斜杠将暂时禁用您称为cp的任何别名。

暂时停用很好…非常感谢你,克里斯……

@Thiyagu114没问题。欢迎光临。

@周济的反冲禁用了化名,正如我在回答中所说的。因此,除了调用别名cp,\cp将调用命令cp。这似乎相当于运行command cp。

@克里斯,我以前没仔细读过。谢谢!

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

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

您可以通过alias命令检查:

$ alias

alias cp='cp -i'

alias diff='diff -u'

....

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

$ unalias cp

打我42秒!P

是的,我做过联合国艾滋病规划署的CP-I,现在开始工作了。感谢您宝贵的答复。

它只是"联合国艾滋病规划署"

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

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

\cp -fR source target

谢谢!救命!:)

克里斯5年前说过同样的话

默认情况下,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的别名通常如下

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

如果您确定要进行覆盖,请使用:

/bin/cp  src dest

5年前,PGL也说过同样的话。

cp -u ...

cp --update ...

也可以工作。

我的回答似乎不正确。

您也可以使用此命令:

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

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

调用不带别名的命令的另一种方法是在bash中使用command内置。

command cp -rf /zzz/zzz/*

我发现了这个

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

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

如果您想保持别名在全局级别不变,只想为脚本更改别名。

只需使用:

别名CP=CP

然后写下你的后续命令。

-n是"不改写",但他的问题与你的回答完全相反。

为了避免这种确认,您只需使用绝对路径运行cp命令,它将避免使用别名。

/bin/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

其他人则表示,面向用户的CP被系统与cp -i进行了符号链接,这意味着他们试图克服默认值并强制覆盖。听起来您可能混淆了建议的语法,但-n将阻止覆盖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值