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



Leave a Reply