我有可扩展的矢量图标主题目录,并且其中有一堆符号链接,我想将其替换为包含可以与 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