yes - linux overwrite file




如何強制cp在未經確認的情況下被覆蓋 (10)

我試圖使用cp命令並強制覆蓋。

我已經嘗試過cp -rf /foo/* /bar ,但仍然會提示確認每個覆蓋。


-n是“不能覆蓋”的,但他的問題完全與你所回答的相反。

為了避免這種確認,你可以簡單地運行帶有絕對路徑的cp命令,它將避免別名。

/ bin / cp源文件目標


cp通常是這樣的別名

alias cp='cp -i'   # i.e. ask questions of overwriting

如果您確定要進行覆蓋,請使用以下命令:

/bin/cp <arguments here> src dest

你可以做yes | cp -rf xxx yyy yes | cp -rf xxx yyy ,但我的感覺是說如果你以root身份執行它 - 你的.bashrc.profile具有cpcp -i的別名,大多數現代系統(主要是RH衍生物)都會將它用於根配置文件。

您可以通過在命令提示符處運行alias來檢查現有別名,或者可以使用which cp來檢查僅用於cp別名。

如果你確實定義了別名,運行unalias cp會取消當前會話的別名,否則你可以從你的shell配置文件中刪除它。

您可以暫時繞過一個別名,並通過在\的前面加上前綴的非別名版本,例如\cp whatever


你可能有一個別名,將cp映射到cp -i ; 因為使用默認設置, cp不會要求覆蓋。 檢查你的.bashrc ,你的.profile等。

請參閱cp手冊頁 :只有當指定-i參數時, cp才會在覆蓋之前實際提示。

你可以通過alias命令來檢查它:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

要取消定義別名,請使用:

$ unalias cp -i

我只是使用unalias來刪除“cp -i”別名,然後執行複制,然後設置別名。 :

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

不是最漂亮的代碼,但易於設置和高效。 我也檢查別名已經設置了一個簡單的

alias |grep cp

正如其他一些答案所述,你可能使用別名將cp映射到cp -i或類似的地方。 您可以在沒有別名的情況下運行一個命令,方法是在它之前加上反斜杠。 在你的情況下,嘗試

\cp -r /zzz/zzz/* /xxx/xxx

反斜杠將暫時禁用您稱為cp任何別名。


調用沒有別名的命令的另一種方法是在bash中使用command builtin。

command cp -rf /zzz/zzz/*


這不是cp -i 。 如果你不想被要求確認,那就是cp -n ; 例如:

cp -n src dest

或者如果目錄/文件夾是:

cp -nr src_dir dest_dir

默認情況下, cp具有別名到cp -i 。 你可以檢查它,輸入alias ,你可以看到一些像:

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

要解決這個問題,只需使用/bin/cp /from /to命令而不是cp /from /to


cp -u ...
cp --update ...

也適用。





cp