Как заставить создание символической ссылки?

10

У меня есть определенный каталог, полный других каталогов, организованных (названных) по дате. Для удобства пользования у меня есть символическая ссылка, currentуказывающая на последнюю.

В сценарии, который создает новые каталоги дат, я хочу создать или исправить currentсимволическую ссылку, чтобы она указала на самый новый каталог после его создания.

Я думал, что соответствующая команда будет просто, например,

ln -fs 2017-03-01 current

Если currentсимволическая ссылка еще не существует, это работает.


Однако, если currentсимволическая ссылка уже создана (и указывает, скажем, на каталог 2017-02-28), это не сработает:

Вместо удаления символической ссылки currentи создать новую символическую ссылку , currentкоторая указывает на 2017-03-01результат вместо этого будет сломанный символическая под названием 2017-03-01 указывая на себя, отдыхая в директории 2017-02-28(что, где символическая currentзаострены и еще точки).

Это сбило меня с толку, поэтому я прочитал спецификации дляln . Оказывается, это ожидаемое поведение:

СИНТАКСИС

ln [-fs] [-L|-P] source_file target_file

ln [-fs] [-L|-P] source_file... target_dir

ОПИСАНИЕ

...

Вторая форма резюме должна быть принята, когда последний операнд называет существующий каталог.


Таким образом, кажется, что нет никакого способа переопределить символическую ссылку, которая в данный момент указывает на каталог для новой цели, где новая цель имеет имя, отличное от имени символической ссылки. Так ln -fsчто не работает так, как я думал.

Должен ли я rm currentили есть другой подход, который я упустил?

Wildcard
источник

Ответы:

17

В GNU lnесть ln -n, что позволит перенаправить символическую ссылку:

$ mkdir dir1 dir2
$ ln -s dir1 sym
# dir1/
# dir2/
# sym -> dir1/

$ ln -nsf dir2 sym
# dir1/
# dir2/
# sym -> dir2/

BSD coreutils использует этот флаг так -hже, как -nи при использовании, но вполне вероятно, что двоичный файл может поддерживать -nтолько совместимость с GNU .

Кеннет Б. Дженсен
источник