如何从文件创建符号链接

如何从文件创建符号链接

我有可扩展的矢量图标主题目录,并且其中有一堆符号链接,我想将其替换为包含可以与 ln 命令一起使用的名称的文件,我创建了包含如下行的文件:

scalable/actions/messagebox_warning.svg scalable/emblems/emblem-danger.svg
scalable/emblems/emblem-nowrite.svg scalable/emblems/emblem-unreadable.svg
scalable/distributor-logos/debian.svg scalable/emblems/Debian.svg
scalable/mimetypes/gnome-mime-text-plain.svg scalable/emblems/emblem-documents.svg
scalable/emblems/emblem-personal.svg scalable/emblems/emblem-readonly.svg
scalable/mimetypes/package-x-generic.svg scalable/emblems/emblem-package.svg
scalable/apps/download.svg scalable/emblems/emblem-downloads.svg
scalable/devices/network-wired.svg scalable/emblems/emblem-shared.svg
scalable/distributor-logos/ubuntu.svg scalable/emblems/emblem-ubuntu.svg

我尝试使用这个命令:

xargs -L 1 ln -sf < src/symlinks

也试试这个:

xargs -L 1 -I{} ln -sf {} < src/symlinks

但它创建了指向自身的符号链接。如何创建符号链接,其中文件名中的目标是从文件中获取的?

答案1

假设您的文件顺序正确(目标,然后是链接名称),并且文件名不包含特殊字符或空格:

sed 's/^/ln -sf /g' < src/symlinks | sh

会将您的符号链接列表转换为一系列ln -sf命令并使用 运行它sh

答案2

使用while循环的解决方案,假设路径中没有空格或换行符:

while IFS=' ' read -r t l; do ln -sf -- "$t" "$l"; done < src/symlinks

相关内容