2015-05-21 149 views
0

我們的用戶編寫了一個shell腳本來將應用程序複製到OSX上的/ Applications文件夾中。它第一次效果很好,但第二次出現錯誤。這是一個新的發展,在我們更改應用程序名稱之前,它顯然已經正常工作。Shell腳本CP無法覆蓋目錄

shell腳本運行如下:

cp -a ApplicationName.app /Applications 
open -a '/Applications/ApplicationName.app/Contents/MacOS/ApplicationName' --args -LSRC autolaunch 

它第一次運行時,它工作正常,應用程序在複製,然後將其啓動。第二次它帶回以下錯誤

[[email protected]] $ sudo ./InstallScript.sh /SRNM ABC1234567 
cp: cannot overwrite directory /Applications/ApplicationName.app/Contents/Frameworks/Sparkle.framework/Headers with non-directory ApplicationName.app/Contents/Frameworks/Sparkle.framework/Headers 
cp: cannot overwrite directory /Applications/ApplicationName.app/Contents/Frameworks/Sparkle.framework/Resources with non-directory ApplicationName.app/Contents/Frameworks/Sparkle.framework/Resources 
cp: cannot overwrite directory /Applications/ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr_CA.lproj with non-directory ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr_CA.lproj 
cp: cannot overwrite directory /Applications/ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt.lproj with non-directory ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt.lproj 
cp: cannot overwrite directory /Applications/ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/Current with non-directory ApplicationName.app/Contents/Frameworks/Sparkle.framework/Versions/Current 

我不完全確定爲什麼發生這種情況。它是完全相同的位置完全相同的腳本,相隔30秒完全相同的東西。我挖入每個目錄和文件都顯示完全相同的文件類型。我試圖向cp添加其他命令來強制它(-RfXv),但得到了同樣的結果。有任何想法嗎?也許這是一個奇怪的事情閃閃發光?

回答

0

我會懷疑有問題的文件/目錄有一些擴展屬性,並且cp有問題覆蓋具有這些屬性時的目標。 (cp,當保留權限在不同平臺上通常看起來不可靠時)。

鑑於此,有幾個解決方法探索:

  • 重新複製之前刪除目標/Applications/ApplicationName.app
  • 使用rsync,例如

    rsync的-vaz ApplicationName.app/ /Applications/ApplicationName.app

第一卸下目標可使用它,而要更新它的人干擾; rsync遞增地工作(並且幾乎總是比cp更快地更新)。