ln -s: из одного источника во многие пункты назначения


8

ПСЕВДОКОД

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

где я хочу создать символическую ссылку от источника до двух мест назначения. Возможно, moreutilsи pee.


Как вы можете создать много символических ссылок из одного источника?

Ответы:


11

Вы не можете сделать это с помощью одного вызова ln, но вы можете перебрать все необходимые пункты назначения:

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

2
Вы можете опустить кавычки, если ваш домашний базовый каталог не содержит пробелов или других символов, которые необходимо экранировать, например, пунктуацию. Однако использование кавычек всегда там, где это уместно, создает привычку, которая удерживает вас от ошибок в других случаях, когда имена каталогов / файлов могут легко содержать специальные символы
Serge

6

Если у вас есть, gnu parallelвы можете попробовать с

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

или, чтобы объединить несколько целей в одно и то же место

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

2
@Masi Убедитесь, что вы запускаете parallelкоманду из parallelпакета, а не из moreutils.
Жиль "ТАК - перестань быть злым"

5

Это не менее многословно, чем два отдельных ln -sвызова:

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

но это работает только для абсолютных путей (потому что символические ссылки интерпретируются относительно их родительского каталога, если они не являются абсолютными).

(Относительная стоимость снижается, конечно, с увеличением количества ссылок. Кроме того, этот фрагмент основан на том факте, что $HOMEне содержит пробелов, табуляции или новых строк.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.