Сценарий оболочки CP не может перезаписать каталог
Наши пользователи написали сценарий оболочки для копирования приложения в папку /Applications на OSX. он отлично работает в первый раз, но во второй раз они получают ошибку. Это новая разработка, она работала нормально до того, как мы изменили название приложения.
Сценарий оболочки запускает следующее:
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), но получил то же самое. Есть идеи? может это странная вещь с блеском?
1 ответ
Я подозреваю, что проблемные файлы / каталоги имеют некоторые расширенные атрибуты, и что cp
возникают проблемы с перезаписью цели, когда у нее есть эти атрибуты. (cp
при сохранении разрешений часто кажется ненадежным на разных платформах).
Учитывая это, есть несколько обходных путей для изучения:
- удалить цель
/Applications/ApplicationName.app
перед повторным копированием. использование
rsync
например,rsync -vaz ApplicationName.app/ /Applications/ApplicationName.app
Первое удаление цели может помешать людям, использующим ее, пока вы ее обновляете; rsync
работает постепенно (и почти всегда обновляется быстрее, чем cp
).