我们的用户编写了一个shell脚本,将应用程序复制到OSX上的/ Applications文件夹中。它第一次运行很好,但第二次出错。这是一个新的开发,它显然在我们更改App名称之前工作正常。
shell脚本运行以下命令:
cp -a ApplicationName.app /Applications
open -a '/Applications/ApplicationName.app/Contents/MacOS/ApplicationName' --args -LSRC autolaunch
第一次运行时,它运行正常,应用程序被复制然后启动。第二次出现以下错误
[jrivera@chamomile] $ 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 :(得分:1)
我怀疑有问题的文件/目录有一些扩展属性,并且cp
在具有这些属性时覆盖目标时遇到问题。 (保留权限时cp
在不同平台上看起来通常不可靠。)
鉴于此,需要探索几种解决方法:
/Applications/ApplicationName.app
,然后重新复制它。使用rsync
,例如,
rsync -vaz ApplicationName.app/ /Applications/ApplicationName.app
首先删除目标可能会在更新时干扰使用它的人; rsync
以递增方式工作(并且几乎总是比cp
更快地更新。)