Ответ 1
ln -sfn /other/dir new_dir
работает для меня. -n
не разыскивает символическую ссылку назначения.
Я создал символическую ссылку:
sudo ln -s /some/dir new_dir
Теперь я хочу переписать символическую ссылку, чтобы указать на новое местоположение, и она не будет перезаписана. Я пробовал:
sudo ln -f -s /other/dir new_dir
Я всегда могу sudo rm new_dir
, но я предпочел бы, чтобы он переписывал соответственно, если это было возможно. Любые идеи?
ln -sfn /other/dir new_dir
работает для меня. -n
не разыскивает символическую ссылку назначения.
Вы можете создать его, а затем переместить его:
sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir
edit: Missing -Tf, чтобы обрабатывать каталог как обычный файл и не запрашивать перезапись.
Таким образом вы перезапишите его.
Поскольку комментарий Link from mikeytown2s нарушен, я объясню, почему redent84s answer лучше:
В то время как
ln -sfn newDir currentDir
выполняет задание не является атомной операцией, как вы можете видеть с помощью strace:
$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir") = 0
symlink("newDir", "currentDir") = 0
Это важно, когда у вас есть корневой веб-сервер, указывающий на эту символическую ссылку. Это может привести к ошибкам, в то время как символическая ссылка будет удалена и создана снова - даже в период времени микросекунды.
Вместо предотвращения использования ошибок:
$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir
Это создаст временную ссылку и после этого перезаписывает currentDir в атомной операции.