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
don_crissti
источник
2
@Masi Убедитесь, что вы запускаете parallelкоманду из parallelпакета, а не из moreutils.
Жиль "ТАК - перестань быть злым"
5

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

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

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

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

Стивен Китт
источник