mv файл без нарушения символической ссылки на этот файл

Можно ли mv удалить файл с символической ссылкой на этот файл? Мой первоначальный ответ на это - нет, и я разрабатываю решение на основе скриптов для изменения ссылок сразу после перехода, но мне было интересно, как другие подошли к этой проблеме. Пути и имена символических ссылок известны заранее, поэтому в теории все, что мне нужно сделать, это:

  1. получить ссылку на ссылку
  2. mv цель
  3. воссоздайте ссылку на новую цель
  4. создайте новую ссылку на новую цель (отличную от исходной ссылки, которую я все еще хочу сохранить)

Позднее:

  1. удалить старую ссылку

1-4 будет инкапсулирован в сценарий bash, но мне интересно, имеет ли кто-нибудь более элегантный подход или знает встроенную или команду, о которой я не знаю.

21 голос | спросил gabe. 23 PM00000060000000731 2011, 18:33:07

2 ответа


7

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

Шаги 3 и 4 немного запутывают. Если вы хотите перенацелировать существующие ссылки, поддерживающие одно и то же имя, вы можете использовать ln -f для перезаписывания существующих файлов. Если вы хотите, чтобы имя ваших ссылок также изменилось, чтобы отразить новое имя цели, ваша последовательность верна.

ответил Caleb 23 PM00000070000001831 2011, 19:02:18
4

В вашей ситуации:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
ответил Peter.O 23 PM00000060000000731 2011, 18:47:07

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

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

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