Linux 技术手札

cp 指令强制覆蓋

Linux 的 cp 指令用作复制档案, 而 cp 指令其中一个参数 -f 是 force 强制的意思, 即是当目标档案存在时, 不会询问使用者, 而会强制把档案覆蓋已经存在的目标档案, 而用 “man cp” 有完整的解释:

-f, –force
if an existing destination file cannot be opened, remove it and
try again (redundant if the -n option is used)

而用 cp 指令强制复制时, 指令应该是这样:

$ cp -f src_file dest_file

以上指令是将 src_file 复制到 dest_file, 如果 dest_file 已经存在会覆蓋原来的 dest_file, 但上面指令即使加了 -f 参数, 有时也不能成功复制。

出现这个问题的原因, 是因为部份作业系统为了防止用户操作错误, 会为 cp 加上 alias, 在 CentOS 用 alias 可以查看:

$ alias cp
alias cp=’cp -i’

那即是执行 cp 时, 其实是执行 “cp -i”, 而 cp 指令的 -i 参数是互动模式, 如果目标档案已经存在, 需要用户确认, 用 “man cp” 的解释是:

-i, –interactive
prompt before overwrite (overrides a previous -n option)

知道发生问题的地方行, 可以用管线的方法, 自动向 cp 输入 “yes” 答复, 以上面的例子, 指令语法是这样:

$ yes | cp -f src_file dest_file

另一个方法是暂时取消 alias, 再执行 cp 指令:

$ unalias cp
$ cp -f src_file dest_file

要暂时取消 alias, 除了用 unalias 外, 也可以在指令前面加上 “\” 符号, 作用是在执行该指令时, 暂时取消 alias:

$ \cp -f src_file dest_file
Exit mobile version