mv файл, не порушуючи символьне посилання на цей файл


24

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

  1. отримати ціль посилання
  2. mv ціль
  3. відтворити посилання на нову ціль
  4. створити нове посилання на нову ціль (відмінну від початкової, яку я все ще хочу зберегти)

Пізніше:

  1. видалити старе посилання

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


2
Жорсткі посилання не мають цієї проблеми. Однак вони мають і інші недоліки. :-)
Стефан Гіменез

3
Так, не вдається використовувати жорсткі посилання, оскільки файли знаходяться в декількох файлових системах.
габе.

2
Також: не вдається жорстке посилання на каталог.
sampablokuper

Відповіді:


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

Зауважте: складніше буде, якщо буде задіяний ланцюжок посилань.
Пітер.O

0

У мене є наступна проблема. Я знайшов дуже хорошу тему значків під назвою "Suru ++"

Suru ++ 20 [Офіційно не підтримує помилок та 11 DE-сумісних]

Але ця тема значків зроблена в svg зображенні. Тепер я хочу , щоб використовувати його в Fluxbox і створювати пункти меню , але це тільки можливо з PNG зображення значка I скачати майстер всередині, які все іконки в форматі SVG, і так я можу конвертувати з командного рядка SVG в дитячому все КІ генерувати для кожного розмір папки на зразок 16x16, 24x24 px. Але в цих папках є символічні посилання на SVG-файли:

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

Якщо є можливість змінити розширення svg на png у всіх посиланнях symbolix, тема значків буде добре працювати в меню Fluxbox та файлових менеджерах. Я зробив запис про цю тему значків, використовуючи Xubuntu, але іспанською мовою

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.