我有相当多的符号链接(单个文件夹中有一百多个,其他几十个文件夹中每个文件夹中有几十个符号链接),在从 Mate 16.04 移动到 Kubuntu 20.04 后不起作用(显然没有考虑到我重新创建时当前未连接的盘片驱动器/etc/fstab
)——以前的是/media/user/sdc9
现在只是/sdb9
。这些是我根据接受的答案链接的文件这个问题。
我已经验证过,对这些符号链接进行精确的更改将纠正它们,使它们打开它们指向的文件夹。与重新创建它们或手动编辑所有符号链接的属性(我已经对四个符号链接进行了编辑,足以确认这可以解决问题)相反(我是否提到过至少有几百个这样的符号链接,一组符号链接分布在几十个文件夹中?),有没有一种有效的方法,最好是每个文件夹使用一个命令,来更改每个符号链接的目标并替换/media/user/sdc9
为/sdb9
-- 而不进行其他更改?
我知道有方法可以使用通配符重命名文件,或者将输出输入ls
到awk
或其他看似神秘的路径中。我推测可以对这些文件的内容进行类似的操作,这些文件的内容充当指向其他文件或文件夹的指针。然而,尽管使用基于 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
;它可能大多数时候都会有效,但最终你会失败。