ln -s: de una fuente a muchos destinos

8

Pseudocódigo

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

donde quiero crear un enlace simbólico desde el origen a dos destinos. Probablemente moreutilsy pee.


¿Cómo puedes crear muchos enlaces simbólicos a partir de una fuente?

Léo Léopold Hertz 준영
fuente

Respuestas:

11

No puede hacer esto con una sola invocación de ln, pero puede recorrer todos los destinos necesarios:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done
Sarga
fuente
2
Puede omitir las comillas si su directorio base no contiene espacios u otros caracteres para escapar, por ejemplo, puntuación. Sin embargo, el uso de comillas siempre que sea apropiado crea un hábito que evita errores en otros casos en los que los nombres de directorio / archivo pueden contener caracteres especiales fácilmente
Serge
6

Si tienes gnu parallelpuedes probar con

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

o, para vincular múltiples objetivos a (los mismos) múltiples destinos

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2
don_crissti
fuente
2
@ Masi Asegúrese de ejecutar el parallelcomando desde el parallelpaquete y no desde el moreutils.
Gilles 'SO- deja de ser malvado'
5

No es menos detallado que dos ln -sinvocaciones separadas :

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

pero eso solo funciona para rutas absolutas (porque los enlaces simbólicos se interpretan en relación con su directorio principal, a menos que sean absolutos).

(El costo relativo disminuye, por supuesto, a medida que aumenta el número de enlaces. Además, este fragmento se basa en el hecho de que $HOMEno contiene espacios, pestañas o líneas nuevas).

Stephen Kitt
fuente