Справочная информация: по умолчанию формат plist в Mac OS X является двоичным, что не очень хорошо для таких вещей, как отслеживание с помощью git. Существует команда plutil -convert которая может преобразовывать туда и обратно из двоичного файла в XML, но, кажется, невозможно заставить данный файл plist остаться в формате XML.

Моя идея состоит в том, чтобы использовать функциональность launchd WatchPaths для установки двух сценариев: один изменяет двоичный файл в ~/Library/Preferences на XML-файл в моем git-репо, а другой - обратно преобразовывает двоичный файл, если изменяется версия XML (я Мне нужно это второе направление, потому что я собираюсь использовать его для синхронизации двух компьютеров).

Единственная проблема заключается в том, что, если я просто настрою это наивно, он будет работать бесконечно, потому что, как только двоичный файл изменится, он обновит XML-файл, но тогда это будет изменение XML-файла, что приведет к это обновление двоичного файла и так далее.

Есть ли умный способ избежать этого цикла. Я думаю, что я хочу сделать, это проверить в скрипте, который преобразует из двоичного в XML, если вещь, которая написала файл последним, была программа, для которой файл предпочтений, или сам скрипт, и если это последний, чтобы не запустить. Есть ли какой-нибудь атрибут, который я могу добавить в файл, который сообщит об этом, который будет очищен, когда обычная программа записывает файл?

1 ответ1

0

Очевидно, по крайней мере для одной программы, которую я тестировал, если вы используете xattr -w для помещения атрибута в файл, то при изменении настроек этот атрибут удаляется, предположительно, потому что он записывает целый новый файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .