ln -s: da una fonte a molte destinazioni


8

pseudocodice

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

dove voglio creare un collegamento simbolico dalla sorgente a due destinazioni. Probabilmente, moreutilse pee.


Come è possibile creare molti collegamenti simbolici da un'unica fonte?

Risposte:


11

Non puoi farlo con una singola invocazione di ln, ma puoi scorrere tutte le destinazioni necessarie:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done

2
È possibile omettere le virgolette se la directory della propria home base non contiene spazi o altri caratteri da sfuggire, ad es. Punteggiatura. Tuttavia, usare le virgolette sempre dove appropriato crea un'abitudine che ti impedisce di errori in altri casi in cui i nomi di directory / file potrebbero facilmente contenere caratteri speciali
Serge

6

Se hai gnu parallelpotresti provare con

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

oppure, per collegare in modo simbolico più destinazioni a (le stesse) più destinazioni

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2

2
@Masi Assicurati di eseguire il parallelcomando dal parallelpacchetto e non quello da moreutils.
Gilles 'SO- smetti di essere malvagio' il

5

Non è meno prolisso di due ln -sinvocazioni separate :

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

ma questo funziona solo per percorsi assoluti (perché i collegamenti simbolici sono interpretati in relazione alla loro directory principale, a meno che non siano assoluti).

(Il costo relativo diminuisce ovviamente con l'aumentare del numero di collegamenti. Inoltre, questo frammento si basa sul fatto che $HOMEnon contiene spazi, tabulazioni o nuove righe.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.