Linux 使用cp命令的錯誤

昨天維護的編譯軟件出了一個奇怪的問題,功能大概是這樣的: java

一、下載資源和代碼; linux

二、編譯; windows

三、將須要打包的文件複製到臨時目錄打包。 遞歸

後來因爲新需求,修改了一下功能,在複製到臨時目錄以前還有回去一些資源到臨時目錄: 資源

2.五、下載三方資源到臨時目錄。 編譯

增長此功能後錯誤就出現了,複製的臨時目錄的結構全亂了,好比: 打包

java/bin應複製到temp/bin,結果去錯誤的複製到了temp/bin/bin。 軟件

看到此問題我覺得是2.5步驟中下載的資源包目錄有問題,將功能運行到2.5步中止查看目錄無問題,保留第3步把2.5刪除也無問題,惟獨這些一塊兒運行就有問題,並且windows系統下沒問題,Linux卻有問題。 下載

後來一位前輩想到了問題的緣由,linux系統下面調用了cp命令來複制文件和文件夾,問題就出在這裏。 di

調用的命令 cp -arf srcdir destdir

-a是要複製連接文件,有些生僻,-r遞歸-f強制較常見。

從srcdir到destdir有講究。舉例子來講:

cp -arf java/bin temp/bin 有兩種狀況的複製:

a.複製前 若temp/bin不存在,則將java/bin直接複製到temp,即temp/bin就是java/bin;

b.複製前 若temp/bin存在,則將java/bin複製到temp/bin/中,即temp/bin/bin纔是java/bin。

以前沒有2.5步temp下的bin不存在因此不會有問題,加入2.5步使得bin目錄存在了因此致使複製出錯。

解決方式是這樣複製

cp -arf java/bin temp/

這樣不論怎樣都會正確,注意temp後必定要加/。

另外,windows下使用的是xcopy命令,不會有這樣的問題。

相關文章
相關標籤/搜索