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/*.bar
me da
foo.bar
baz.bar
¿Cómo puedo pasar la lista de parámetros para ln -s
que 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 xargs
o 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
find
Ademá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
-v
para verbose.O si la lista es demasiado larga, usando la
find
utilidad:Esto creará enlaces
dest/
o lo cambiará a.
la carpeta actual.fuente
cp
con la-s
opción puede crear enlaces blandos (o-l
para enlaces duros).Desde el directorio actual se puede usar así:
En tu caso será así:
fuente