1. 前言
本文主要讲解如何处理cp命令复制文件时不能覆盖旧文件的问题。
2. 问题重现
假设目标文件名为zcwyou.txt,源文件名为zcwyou2.txt
查看目标文件zcwyou.txt的内容
cat zcwyou.txt
输出内容为:
1
查看源文件zcwyou2.txt的内容
cat zcwyou2.txt
输出内容为:
1
2
很明显,这2个文件的内容并不一样。
试试把zcwyou.txt复制覆盖zcwyou2.txt
cp zcwyou.txt zcwyou2.txt
提示是否要覆盖,我输入yes
:
cp:是否覆盖"zcwyou2.txt"? yes
验证结果:
cat zcwyou2.txt
输出结果:
1
目标文件内容没有变化,表示没有复制成功。
试试添加选项-f
,表示强制执行。
[root@localhost ~]# cp -f zcwyou.txt zcwyou2.txt
同样被提示以下信息:
cp:是否覆盖"zcwyou2.txt"?
结果跟上一次是一样的。复制覆盖失败。
3. 原因分析
查看用户变量环境定义配置文件.bashrc
发现有一行这样的定义:
alias cp='cp -i'
选项解释:
-i, --interactive
表示覆盖前提供交互。
4. 覆盖失败的解决方法
4.1 取消别名定义
修改.bashrc
文件
把alias cp='cp -i'
删除或者注释掉。
重新导入环境变量,才能立即生效。
source .bashrc
再试试复制覆盖。
cp -f zcwyou.txt zcwyou2.txt
4.2 直接使用cp原生程序
/bin/cp -f zcwyou.txt zcwyou2.txt
4.3 在cp命令前面加一个斜杠\
\cp -f zcwyou.txt zcwyou2.txt
5. 验证结果
查看现有文件的内容
cat zcwyou2.txt
输出结果:
1
2
文件内容更新。
6. 结论
非常简单且经常用到的功能,但是还是值得研究一下。如果你有更好的方法,请留言。
评论前必须登录!
注册