ln -s: de uma fonte para vários destinos

8

Pseudo-código

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

onde eu quero criar um link simbólico da fonte para dois destinos. Provavelmente moreutilse pee.


Como você pode criar muitos links simbólicos de uma fonte?

Léo Léopold Hertz 준영
fonte

Respostas:

11

Você não pode fazer isso com uma única chamada de ln, mas pode percorrer todos os destinos necessários:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done
Sarja
fonte
2
Você pode omitir as aspas se o diretório base não contiver espaços ou outros caracteres a serem escapados, por exemplo, pontuação. No entanto, o uso de aspas sempre quando apropriado torna um hábito que o impede de erros em outros casos onde os nomes de diretório / arquivo poderia facilmente contêm caracteres especiais
Serge
6

Se tiver, gnu parallelvocê pode tentar com

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

ou, para vincular vários destinos a (o mesmo) vários destinos

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2
don_crissti
fonte
2
@Masi Certifique-se de executar o parallelcomando no parallelpacote e não no moreutils.
Gilles 'SO- stop be evil' em
5

Não é menos detalhado do que duas ln -sinvocações separadas :

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

mas isso funciona apenas para caminhos absolutos (porque os links simbólicos são interpretados em relação ao diretório pai, a menos que sejam absolutos).

(O custo relativo diminui, é claro, à medida que o número de links aumenta. Além disso, esse trecho depende do fato de que $HOMEnão contém espaços, guias ou novas linhas.)

Stephen Kitt
fonte