Comment puis-je créer un lien symbolique qui crée plusieurs liens vers un même fichier ?
Je voudrais ~/Desktop/foo.txt
pour "apparaître" à plusieurs endroits ; et ce qui suit ne fonctionne pas :
ln -s ~/Desktop/foo.txt /location/one /location/two
Comment puis-je créer un lien symbolique qui crée plusieurs liens vers un même fichier ?
Je voudrais ~/Desktop/foo.txt
pour "apparaître" à plusieurs endroits ; et ce qui suit ne fonctionne pas :
ln -s ~/Desktop/foo.txt /location/one /location/two
Vérifiez le page de manuel -- vous ne pouvez spécifier qu'une seule destination. Vous devrez faire une boucle :
for destination in /location/one /location/two ...; do
ln -s ~/Desktop/foo "$destination"
done
Pour référence, afin de copier les palettes de couleurs .gpl dans les répertoires appropriés de GIMP, Inkscape et LibreOffice, j'ai fait ceci :
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
Un simple langage Python peut faire l'affaire :
$ 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
Le fonctionnement est simple. Nous utilisons sys
pour traiter les arguments de la ligne de commande, et utiliser le module symlink()
de la fonction os
module. Le site map()
est essentiellement utilisée pour remplacer la fonction for
boucle, qui prend une fonction et une liste comme argument. Ici, la fonction est lambda x:os.symlink(sys.argv[1],x)
et il sera exécuté pour chaque élément de la liste. sys.argv[2:]
liste.
Note, ~/input.txt
est le fichier original (appelé sys.argv[1]
(deuxième argument de ligne de commande), et ~/Desktop/input.txt
et ~/Pictures/input.txt
sont des liens symboliques résultants. Ce sont les arguments 2 et 3, nous utilisons donc sys.argv[2:]
tranche de la liste en partant du 3ème élément jusqu'à la fin de la liste. Vous vous demandez peut-être, où est le premier argument. Il s'agit de -c
drapeau.
Une forme script de la même chose serait
#!/usr/bin/env python
import sys,os
for item in sys.argv[2:]:
os.symlink(sys.argv[1],item)
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.