Me gustaría crear enlaces simbólicos ( ln -s) a todos los archivos (o una clase de archivos, por ejemplo, terminando con .bar) en un determinado directorio. Digamos que estoy en cwd y el tipo ls ../source/*.barme da
foo.bar
baz.bar
¿Cómo puedo pasar la lista de parámetros para ln -sque finalmente se resuelva en
ln -s ../source/foo.bar
ln -s ../source/baz.bar
Por supuesto, sé que puedo escribir un script bash, pero debería haber algo más simple que implique más xargso menos, ya que parece ser una tarea común, al menos para mí.
linux
bash
symbolic-link
dastrobu
fuente
fuente

*.bar. Creará un enlace con el nombre"*.bar", que no es lo que desea.shopt -s failglob; consulte, por ejemplo, unix.stackexchange.com/a/216227/33390 (el equivalente en zsh essetopt nomatch, que está activado de forma predeterminada)Utilizar
findAdemás, recuerde utilizar rutas completas (cuando sea posible) con enlaces simbólicos.
fuente
find $certainDir -name "*.bar" -exec ln -s {} \;? ¿Y por qué debería usar rutas completas? Encuentro bastante conveniente saber que los enlaces permanecen intactos cuando muevo un árbol de directorios que tiene algunos enlaces internos.Puedes probar recursivamente con el uso de globstar (bash / zsh establecido por:)
shopt -s globstar:Nota: Agregado
-vpara verbose.O si la lista es demasiado larga, usando la
findutilidad:Esto creará enlaces
dest/o lo cambiará a.la carpeta actual.fuente
cpcon la-sopción puede crear enlaces blandos (o-lpara enlaces duros).Desde el directorio actual se puede usar así:
En tu caso será así:
fuente