我该如何创建一个可以向一个文件创建多个链接的符号链接?
我想~/Desktop/foo.txt
“出现”在多个位置;但以下方法不起作用:
ln -s ~/Desktop/foo.txt /location/one /location/two
答案1
检查手册页-- 您只能指定一个目的地。您必须循环:
for destination in /location/one /location/two ...; do
ln -s ~/Desktop/foo "$destination"
done
答案2
作为参考,为了将 .gpl 颜色调色板复制到适当的 GIMP、Inkscape 和 LibreOffice 目录中,我执行以下操作:
read -e -p "Enter filename: " file
for destination in ~/.config/libreoffice/4/user/config/ ~/.config/inkscape/palettes/ ~/.gimp-2.8/palettes/ ...; do
ln --symbolic --backup --force "$file" "$destination"
done
答案3
相对简单的python单行代码就可以完成这个工作:
$ python -c 'import sys,os;map(lambda x:os.symlink(sys.argv[1],x),sys.argv[2:])' ~/input.txt ~/Desktop/input.txt ~/Pictures/input.txt
$ ls -l ~/Desktop/input.txt
lrwxrwxrwx 1 xieerqi xieerqi 23 2月 4 19:10 /home/xieerqi/Desktop/input.txt -> /home/xieerqi/input.txt
它的工作方式很简单。我们使用sys
模块来处理命令行参数,并使用 模块symlink()
中的函数。该函数本质上是用来替代循环的,循环以函数和列表作为参数。在这里,函数是,它将针对列表中的每个项目执行。os
map()
for
lambda x:os.symlink(sys.argv[1],x)
sys.argv[2:]
注意,~/input.txt
是原始文件(称为sys.argv[1]
,第二个命令行参数), 和~/Desktop/input.txt
是~/Pictures/input.txt
结果符号链接。它们是参数 2 和 3,因此我们使用sys.argv[2:]
从第 3 项开始直到列表末尾的列表切片。您可能想知道,嗯,第一个参数在哪里。那是-c
标志。
相同内容的脚本形式如下
#!/usr/bin/env python
import sys,os
for item in sys.argv[2:]:
os.symlink(sys.argv[1],item)
答案4
尝试这个:
ln -s /path/dir/{dir1,dir2,dir3} /path/destination