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
具有cp
到cp -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 ...
也適用。