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?

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

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

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.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.