ln -s: d'une source à plusieurs destinations

8

Pseudocode

ln -s $HOME/file $HOME/Documents/ $HOME/Desktop/

où je veux créer un lien symbolique de la source vers deux destinations. Probablement, moreutilset pee.


Comment pouvez-vous créer de nombreux liens symboliques à partir d'une seule source?

Léo Léopold Hertz 준영
la source

Réponses:

11

Vous ne pouvez pas le faire avec une seule invocation de ln, mais vous pouvez parcourir toutes les destinations nécessaires:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done
Serge
la source
2
Vous pouvez omettre les guillemets si votre répertoire de base personnel ne contient pas d'espaces ou d'autres caractères à échapper, par exemple la ponctuation. Cependant, l'utilisation de guillemets toujours le cas échéant crée une habitude qui vous évite les erreurs dans d'autres cas où les noms de répertoire / fichier peuvent facilement contenir des caractères spéciaux
Serge
6

Si vous avez, gnu parallelvous pouvez essayer avec

parallel ln -s /path/file {} ::: /path/dest1 /path/dest2 /path/dest3

ou, pour créer un lien symbolique entre plusieurs cibles et (les mêmes) plusieurs destinations

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2
don_crissti
la source
2
@Masi Assurez-vous d'exécuter la parallelcommande à partir du parallelpackage et non celle de moreutils.
Gilles 'SO- arrête d'être méchant'
5

Elle n'est pas moins verbeuse que deux ln -sinvocations distinctes :

echo $HOME/Documents/ $HOME/Desktop/ | xargs -n 1 ln -s $HOME/file

mais cela ne fonctionne que pour les chemins absolus (car les liens symboliques sont interprétés par rapport à leur répertoire parent, sauf s'ils sont absolus).

(Le coût relatif diminue bien sûr à mesure que le nombre de liens augmente. De plus, cet extrait de code repose sur le fait qu'il $HOMEne contient aucun espace, onglet ou nouvelle ligne.)

Stephen Kitt
la source