MV файл без разрыва символической ссылки на этот файл


24

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

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

Впоследствии:

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

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


2
Жесткие ссылки не имеют этой проблемы. У них есть и другие недостатки. :-)
Стефан Гименес

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

2
Также: не может быть жесткая ссылка на каталог.
Сампаблокупер

Ответы:


8

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

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


1
Хех, да, просто перечитайте эту часть, и теперь я тоже запуталась. Я настрою это так, чтобы это имело больше смысла. Спасибо.
таращиться

Я немного запутался в использовании ln -f, но я думаю, что опубликованный скрипт @fred может помочь прояснить, как он работает. К удивлению, справочная страница не сильно помогла.
таращиться

@gabe. Первоначальная версия моего ответа была правильной -s -f, но, придавая ей форму, она «потеряла» -s: неправильно! Из википедии : «ln» без опций создает жесткую ссылку, «ln -f» форсирует жесткую ссылку ... так что спасибо за вопрос, он действительно подтвердил синтаксис для меня сейчас ... Это, безусловно, заставило меня перепроверить вещи ... Это требует ln -s -f.. (Я сделал корректировку)
Peter.O

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

0

У меня следующая проблема. Я нашел очень хорошую тему значков под названием "Suru ++"

Suru ++ 20 [Официально без ошибок и 11 DE-совместимых]

Но эта иконка темы сделана в svg всем образом. Теперь я хочу использовать его в Fluxbox и генерировать пункты меню, но это возможно только с png icon image. Я загружаю мастер внутри, все иконки в формате svg, и да, я могу преобразовать из командной строки svg в png все нормально генерировать для каждого Размер папки, как 16x16, 24x24 пикселей. Но в этих папках есть символические ссылки на файлы SVG:

svg расширений внутри символических ссылок, которые я хочу изменить на png

Если есть возможность изменить расширение svg на png внутри всех ссылок Symbolix, тема значков будет работать нормально в меню Fluxbox и файловых менеджерах. Я сделал запись об этой теме значков, используя в Xubuntu, но на испанском

Бог благословил

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.