Создать символическую ссылку - перезаписать, если таковая существует

Я хочу удалить данные в /path/to/data/folder/month/date/hour/minute/file и символически привязать его к /path/to/recent/file и делать это автоматически при каждом создании файла.

Предполагая, что я не буду знать заранее, если существует /path/to/recent/file, как я могу его создать (если он не существует ) или заменить его (если он существует)? Я уверен, что могу просто проверить, существует ли он, а затем сделать удаление, символическую ссылку, но мне интересно, есть ли простая команда, которая сделает то, что я хочу за один шаг.

33 голоса | спросил drjrm3 3 J0000006Europe/Moscow 2015, 15:48:28

2 ответа


45

Это назначение ln '-f: он удаляет существующие файлы назначения, если они есть, перед созданием ссылки.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

создаст символическую ссылку /path/to/recent/file, указывая на /path/to/data/folder/month/date/hour/minute/file, заменив любой существующий файл или символическую ссылку на файл, если это необходимо (и работает нормально, если там уже ничего не существует).

Если каталог или символическая ссылка на каталог уже существует с целевым именем, символическая ссылка будет создана внутри него (так что вы закончите с помощью /path/to/recent/file/file в примере выше). Опция -n, доступная в некоторых версиях ln, позаботится о символических ссылках на каталоги для вас, заменив их при необходимости:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIX ln не указывает -n, поэтому вы не можете полагаться на него в целом. Значительная часть поведения ln определяется реализацией, поэтому вам действительно нужно проверить специфику используемой системы. Если вы используете GNU ln , вы можете использовать -t и -T, чтобы сделать его поведение полностью предсказуемым при наличии каталогов ( ie сбой вместо создания ссылки внутри существующего каталог с тем же именем).

ответил Stephen Kitt 3 J0000006Europe/Moscow 2015, 15:57:40
27

Прочитайте руководство .

ln -sfn /new/target /path/to/symlink
  

$ man ln

     

-n, --no-разыменование
  обрабатывать LINK_NAME как обычный файл, если это символическая ссылка на   Каталог

ответил LithiumSix 20 TueEurope/Moscow2016-12-20T19:04:27+03:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2016 19:04:27 +0300 2016, 19:04:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132