Сценарий оболочки 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).

Другие вопросы по тегам