Вы можете сделать это, если используете символические ссылки:
Допустим, альфа является символической ссылкой на каталог alpha_1, и вы хотите переключить символическую ссылку, чтобы она указала на alpha_2. Вот как это выглядит до переключения:
$ ls -l
lrwxrwxrwx alpha -> alpha_1
drwxr-xr-x alpha_1
drwxr-xr-x alpha_2
Чтобы сделать альфа ссылкой на alpha_2, используйте ln -nsf:
$ ln -nsf alpha_2 alpha
$ ls -l
lrwxrwxrwx alpha -> alpha_2
drwxr-xr-x alpha_1
drwxr-xr-x alpha_2
Теперь вы можете удалить старый каталог:
$ rm -rf alpha_1
Обратите внимание, что это на самом деле не полностью атомарная операция, но она происходит очень быстро, так как команда "ln" отменяет связь, а затем немедленно воссоздает символическую ссылку. Вы можете проверить это поведение с помощью strace:
$ strace ln -nsf alpha_2 alpha
...
symlink("alpha_2", "alpha") = -1 EEXIST (File exists)
unlink("alpha") = 0
symlink("alpha_2", "alpha") = 0
...
Вы можете повторить эту процедуру по желанию: например, когда у вас новая версия, alpha_3:
$ ln -nsf alpha_3 alpha
$ rm -rf alpha_2