Когда Вы хотите, "если" оператор в сценариях оболочки, Вы или не используете "не" условие, которое может глупо искать некоторые тесты, или Вы используете ':' в истинном пункте, с реальным кодом в ложном пункте.
if [ some-exotic-condition ]
then
:
else
# Real code here
fi
"Экзотическое условие" могло быть чем-то, что Вы не хотите инвертировать, или это просто намного более ясно, если Вы не используете "отрицательную логику".
Для не высказывания нет решения этого (хотя я не знаю то, что это), но, vis. "конечно, это должно быть общей задачей" - вероятно, не, потому что Вы используете инструмент для цели, для которой он не был предназначен.
git
система управления версиями, не, файловая система синхронизирует демона или что-то. Люди, делающие материал VCS, не находятся в стремлении обновить вещи на сервере, не удостоверяясь, что их обновление готово (мы надеемся), таким образом, они вряд ли будут быть побеспокоенными, что это перестало работать, потому что что-то было, очевидно, пропущено ("Я встречаюсь, я заблокировал файл, который я должен изменить" - поэтому внесите изменения, которые необходимо внести, затем фиксировать).
Другими словами большинство пользователей мерзавца, вероятно, надеялось бы, что нет решения этого - это - удобная для пользователя функция.
Самый легкий: бездисплейный Dropbox.
С наилучшими пожеланиями: совместный доступ к файлам в сети (SMB или NFS)
Молоток саней (и вероятно не идеальный): стиль развертывания Capistrano. Суть - то, что у Вас есть структура каталогов а-ля:
---syncdirectory
|
-----current----symlink
| |
-----releases |
| |
-----releaseA--|
|
-----releaseB
|
-----releaseC
По существу, каждый мерзавец развертываются, создает новый каталог выпуска, затем символьная ссылка зеркально отражается к 'текущему' каталогу. Ваши открытые файлы не будут заботиться (хотя изменения в них останутся в releaseB в той точке.) Вы удаляете что-либо более старое, чем выпуски, и Ваш каталог является 'новой' версией в любом случае.