cp: overwrite ‘/etc/profile’?

在linux下的使用复制命令cp,不让出现“overwrite”(文件覆盖)提示的方法。

一般我们在使用cp命令时加上-f选项,希望不让出现“overwrite”的提示(文件覆盖的提示)。如:
# cp -rf /ect/profile20240530 /ect/profile

#cp -r -f /ect/profile20240530 /ect/profile
-r的意思是递归复制,也就是复制文件夹及其下所有文件。
-f的意思是遇到同名的文件时不提示,直接覆盖。

但是为什么加上-f了,还出现“overwrite”的提示呢?

这是因为系统为防止我们误操作,覆盖了不该覆盖的文件,而使用了命令的别名。使用alias命令查看一下:
 

[knowledgedict@Linux ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'

从上边我们可以看出,我们输入cp 命令对应了一个别名 cp -i-i 选项强制弹出提示交互信息,所以 -f 参数此时会失效。其他几个命令,如ll,ls mv,rm等也使用了别名。

第一种解决办法:
在cp前加上一个"\"符号就不使用别名运行了,如下:
# \cp -f /ect/profile20240530 /ect/profile
第二种解决办法:
编辑文件,注释掉别名。

  1. [knowledgedict@Linux ~]# alias
    # alias cp='cp -i'
    alias l.='ls -d .* --color=tty'
    alias ll='ls -l --color=tty'
    alias ls='ls --color=tty'
    alias mv='mv -i'
    alias rm='rm -i'

    # vi ~/.bashrc

在alias cp='cp -i'前加上“#”注释掉这行,wq!保存退出,然后重新登陆就可以了。

第三种解决办法:

yes 命令结合管道命令

这个方法非常骚,通过 yes 命令和管道命令 | 传 y 信息给 cp 命令,达到自动确认的功能。

通过 yes 命令和管道命令 | 传 y 信息给 cp 命令,达到自动确认的功能:

[knowledgedict@Linux ~]# yes | cp /ect/profile20240530 /ect/profile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值