如何为一个文件创建多个软链接?

如何为一个文件创建多个软链接?

我该如何创建一个可以向一个文件创建多个链接的符号链接?

我想~/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()中的函数。该函数本质上是用来替代循环的,循环以函数和列表作为参数。在这里,函数是,它将针对列表中的每个项目执行。osmap()forlambda 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

相关内容