如何有效地重新定位多个符号链接?

如何有效地重新定位多个符号链接?

我有相当多的符号链接(单个文件夹中有一百多个,其他几十个文件夹中每个文件夹中有几十个符号链接),在从 Mate 16.04 移动到 Kubuntu 20.04 后不起作用(显然没有考虑到我重新创建时当前未连接的盘片驱动器/etc/fstab)——以前的是/media/user/sdc9现在只是/sdb9。这些是我根据接受的答案链接的文件这个问题

我已经验证过,对这些符号链接进行精确的更改将纠正它们,使它们打开它们指向的文件夹。与重新创建它们或手动编辑所有符号链接的属性(我已经对四个符号链接进行了编辑,足以确认这可以解决问题)相反(我是否提到过至少有几百个这样的符号链接,一组符号链接分布在几十个文件夹中?),有没有一种有效的方法,最好是每个文件夹使用一个命令,来更改每个符号链接的目标并替换/media/user/sdc9/sdb9-- 而不进行其他更改?

我知道有方法可以使用通配符重命名文件,或者将输出输入lsawk或其他看似神秘的路径中。我推测可以对这些文件的内容进行类似的操作,这些文件的内容充当指向其他文件或文件夹的指针。然而,尽管使用基于 Debian 的 Linux 作为我的日常驱动程序已有近十年,但我对 Linux 命令的了解还不够,甚至不知道什么可以在这里完成我需要的工作。对于一个只想完成自己工作而花数百小时​​学习它的人来说,这样的事情出现的频率太低了。

答案1

修复损坏的符号链接的最简单方法是将有问题的分区挂载到/media/user/sdc9

为该分区创建相应的 fstab 条目。不要使用类似/dev/sdc9或 的设备名称/dev/sdb9,而是使用 UUID 或 LABEL 来标识分区。我更喜欢 LABEL 而不是 UUID,因为它更易读,而且我不需要搜索分区 UUID。只需确保 LABEL 在您的系统中是唯一的。

您可以使用以下命令为 ext2、ext3 或 ext4 分区设置标签tune2fs

sudo tune2fs -L /dev/sdxy

其中xy需要替换为正确的字母和数字。

man tune2fs

-L volume-label
          Set the volume label of the filesystem. Ext2 filesystem labels can be at 
          most 16 characters long; if volume-label is longer than 16 characters,
          tune2fs will truncate it and print a warning. The volume label can be
          used by mount(8), fsck(8), and /etc/fstab(5) (and possibly others) by
          specifying LABEL=volume-label instead of a block special device name 
          like /dev/hda5.

该命令lsblk -f将显示有关您的分区的足够信息,包括 LABEL、UUID 和设备名称。

答案2

查找当前目录中所有指向 的符号链接的文件/media/user/sdc9

$ find . -ilname '/media/user/sdc9'

查找当前目录中所有指向 的符号链接的文件/media/user/sdc9,并将其替换为指向 的符号链接/sdc9

$ find . -ilname '/media/user/sdc9' -exec ln -vfs /sdc9 {} \;

{}被文件名替换,并且\;表示要执行的命令的结束。这将依次对找到的每个单个文件进行操作。

如果您的用户没有写权限,您将需要以 root 身份执行此操作。

如果您要在可能已挂载其他文件系统的文件树中执行此操作,请小心;如果您从根目录执行此操作,则它将向下递归,/proc/并且/sys/可能会陷入无限循环。您可能希望使用该-xdev选项来防止find跨越挂载点。

如果您确实只希望这对您列出的目录进行操作而不是向下递归,请使用该-maxdepth 1选项。

不要试图通过解析ls;它可能大多数时候都会有效,但最终你会失败。

相关内容