4 votes

Comment créer plusieurs liens logiciels vers un même fichier ?

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

7voto

Todd Gamblin Points 101

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

1voto

John Points 1

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

1voto

Sergiy Kolodyazhnyy Points 97292

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)

0voto

Rmano Points 30303

Vous avez besoin de deux commandes.

ln -s Desktop/foo.txt location1; ln -s Desktop/foo.txt location2

0voto

irk3n dev Points 61

Essayez ceci :

ln -s /path/dir/{dir1,dir2,dir3} /path/destination

SistemesEz.com

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.

Powered by:

X