cp -f无法覆盖cp -i别名


8

在我的/home/user/.bashrc文件中,我有那些别名可以防止错误:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

如果我真的确定自己在做什么,则可以使用或覆盖rmmv别名,它不会问我是否真的要覆盖文件。rm -fmv -f

问题是,它不适用于该cp命令,使用cp -f仍然会问我一个问题。

这正常吗?为了在cp -i默认情况下具有别名并也能够使用cp -f命令,我该怎么办?

我正在使用Debian Wheezy 64bit。

Answers:


9

虽然-f表示对所有对象施加压力cp,但是,这意味着如果无法更新目标,则首先尝试删除目标以强制使用

对于mvrm,请-f重写-i。但是对于cp,它改变了实用程序的行为,在这种情况下-f不是相反的-icp -i -f有意义并意味着,如果目标存在,请询问用户,如果它不能被覆盖,请先将其删除

即使对于mvrm,在向用户发送警告和错误消息时,添加-f与删除也不相同-i。例如,rm non-existent-file将报告错误,而rm -i -f non-existent-file不会。

如前所述,要消除的影响-i,而不是添加-f,应使用提供的任何解决方案禁用别名。


“对于mv和cp,-f会覆盖-i。” 我的意思是说MV和RM。感谢您的解释,现在对我来说很清楚!
baptx

11

通过给出cp -f,该选项仅与现有选项相加。

也就是说,如果有an alias cp='cp -i',则在命令中替换cp一词cp -f,因此得到cp -i -f file1 file2

要覆盖别名:

\cp -f file1 file2

命令前的反斜杠将禁用别名。您可以使用command cp代替,\cp以提高可读性。


我在帖子中犯了一个错误,当我谈论cp -r时,我的意思是cp -f,它已得到纠正。您的反斜杠解决方案正在工作,谢谢!但是我仍然不明白为什么mv或rm命令不需要反斜杠,别名直接由mv -f和rm -f禁用!
baptx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.