ln -s: von einer Quelle zu vielen Zielen

8

Pseudocode

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

Hier möchte ich einen Symlink von der Quelle zu zwei Zielen erstellen. Wahrscheinlich moreutilsund pee.


Wie können Sie viele Symlinks aus einer Quelle erstellen?

Léo Léopold Hertz 준영
quelle

Antworten:

11

Sie können dies nicht mit einem einzigen Aufruf von tun ln, aber Sie können alle erforderlichen Ziele durchlaufen:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done
Serge
quelle
2
Sie können die Anführungszeichen weglassen, wenn Ihr Basisverzeichnis keine Leerzeichen oder andere Zeichen enthält, die maskiert werden sollen, z. B. Interpunktion. Die Verwendung von Anführungszeichen ist jedoch immer eine Gewohnheit, die Sie vor Fehlern in anderen Fällen bewahrt, in denen Verzeichnis- / Dateinamen leicht Sonderzeichen enthalten können
Serge
6

Wenn Sie haben gnu parallel, könnten Sie es versuchen

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

oder um mehrere Ziele mit (demselben) mehreren Zielen zu verknüpfen

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2
don_crissti
quelle
2
@Masi Stellen Sie sicher, dass Sie den parallelBefehl vom parallelPaket aus ausführen und nicht von moreutils.
Gilles 'SO - hör auf böse zu sein'
5

Es ist nicht weniger ausführlich als zwei separate ln -sAufrufe:

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

Dies funktioniert jedoch nur für absolute Pfade (da symbolische Links relativ zu ihrem übergeordneten Verzeichnis interpretiert werden, sofern sie nicht absolut sind).

(Die relativen Kosten sinken natürlich mit steigender Anzahl von Links. Außerdem $HOMEbasiert dieses Snippet auf der Tatsache, dass es keine Leerzeichen, Tabulatoren oder Zeilenumbrüche enthält.)

Stephen Kitt
quelle