在不破坏该文件符号链接的情况下转换文件


24

有没有可能 mv破坏该文件的符号链接的文件?我最初的回答是“否”,我正在制定一个基于脚本的解决方案以在移动后立即更改链接,但是我想知道其他人如何解决此问题。符号链接的路径和名称是预先已知的,因此从理论上讲,我需要做的是:

  1. 获取链接的目标
  2. MV目标
  3. 重新创建指向新目标的链接
  4. 创建一个指向新目标的新链接(不同于原始链接,该链接我现在仍要保留)

日后:

  1. 删除旧链接

1-4将封装在bash脚本中,但是我想知道是否有人有更优雅的方法,或者知道我不知道的内置命令。


2
硬链接没有这个问题。它们还有其他缺点。:-)
斯特凡·吉梅内斯

3
是的,不能使用硬链接,因为文件跨多个文件系统。
gabe。

2
另外:无法硬链接到目录。
sampablokuper

Answers:


8

您走在正确的道路上,我认为没有比您描述的顺序更简单的方法了。

步骤3和4有点令人困惑。如果要重新定位现有链接,请保留相同的名称,ln -f以覆盖现有文件。如果您希望链接的名称也进行更改以反映新的目标名称,则顺序是正确的。


1
嗯,是的,只是重新阅读了这一部分,现在我也感到困惑。我将对其进行调整,以使其更有意义。谢谢。
gabe。

我对ln -f的使用有些困惑,但是我认为发布的脚本@fred可能有助于阐明其工作方式。手册页并没有太多帮助,令人惊讶的是。
gabe。

@gabe。我的答案的原始版本正确无误-s -f,但在修改时却“丢失”了-s:错误!来自维基百科:没有选项的'ln'创建了一个硬链接,'ln -f'强制了一个硬链接...因此,感谢您提出的问题,它现在确实为我确认了语法。东西...这需要ln -s -f..(我已经进行了调整)
Peter.O 2011年

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 2011年

0

我有下一个问题。我发现一个很好的图标主题叫做“ Suru ++”

Suru ++ 20 [官方上没有错误,并且与11 DE兼容]

但是这个图标主题是在svg所有图像中制作的。现在,我想在Fluxbox中使用它并生成菜单项,但是只有使用png图标图像才有可能,我下载了其中的图标,它们都是svg格式的图标,是的,我可以从命令行svg转换为png,每个都可以生成文件夹大小,例如16x16、24x24像素。但是在该文件夹中是指向svg文件的符号链接:

我想更改为png的符号链接内的svg扩展

如果有办法将所有symbolix链接中的svg扩展名更改为png,则图标主题在Fluxbox菜单和文件管理器中将正常工作。我在Xubuntu中使用了这种图标主题,但是使用西班牙语

上帝保佑

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.