2012-12-13 38 views
8

我想將某個文件複製到某個位置,而不管目標中是否存在該文件。我試圖通過shell腳本複製,但該文件沒有被複制。我使用下面的命令複製並覆蓋shell腳本中的文件

/bin/cp -rf /source/file /destination

,但不起作用。

+0

也許你應該試着--remove目的地 – jDourlens

+1

'cp'覆蓋目標除非給出選項「-n」,所以你的命令應該成功。你也沒有告訴我們爲什麼你認爲你的命令失敗了。 – scai

+0

是否有任何錯誤消息? –

回答

8

這個問題已經討論過,但是你可以寫這樣的小腳本:

#!/bin/bash 
if [ ! -d "$2" ]; then 
    mkdir -p "$2" 
fi 
cp -R "$1" "$2" 
6

使用

cp -fr /source/file /destination 

這也許應該解決的問題。

13

您的問題可能是由默認情況下在系統中創建的cp命令的別名引起的(您可以通過鍵入「別名」來查看別名)。 例如,我的系統默認具有以下alis:alias cp ='cp -i',其中-i覆蓋-f選項,即cp將始終提示您進行覆蓋確認。

你在這種情況下需要什麼(即使你沒有別名,它也會工作)是向該確認提供「是」。要做到這一點,只需修改您的cp命令,看起來像這樣:

yes | CP /源/文件/目的

+0

完美,謝謝你的支持! –

1

/斌/ CP -rf SRC DST 或 在/ usr/bin中/ env的CP -rf

+1

你能解釋爲什麼它的工作,而不是OP的代碼? – Math

+0

這是因爲OP可能在不知不覺中將cp別名爲'cp -i',我認爲一些(所有?)系統將優先考慮-i選項。例如,在我的系統: '>其中CP 別名CP = 'CP -i' \t/bin中/ CP > CP的abc.txt efg.txt CP:覆蓋'efg.txt'? n > cp -f abc.txt efg.txt cp:覆蓋'efg.txt'? N' – verboze