%20en%20un%20directorio%3F.png)
Me gustaría crear enlaces simbólicos ( ln -s
) a todos los archivos (o una clase de archivos, por ejemplo, que terminen en .bar
) en un directorio determinado. Di que estoy en el cwd y escribe 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?
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, xargs
ya que parece ser una tarea común, al menos para mí.
Respuesta1
ln
toma múltiples argumentos, pero no olvide proporcionar un directorio de destino en ese caso.
Entonces, en su ejemplo .
es el directorio de destino, por lo que debería ser tan fácil como
ln -s ../source/*.bar .
De man ln
; el comando anterior usa la tercera forma:
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET (2nd form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
ln [OPTION]... -t DIRECTORY TARGET... (4th form)
- En el primer formulario, cree un enlace a TARGET con el nombre LINK_NAME.
- En el segundo formulario, cree un enlace a TARGET en el directorio actual.
- En las formas 3 y 4, cree enlaces a cada OBJETIVO en el DIRECTORIO.
Respuesta2
Puedes intentarlo recursivamente usando globstar (bash/zsh establecido por:) shopt -s globstar
:
ls -vs ../**/*.bar .
Nota: Agregado -v
para mayor detalle.
O si la lista es demasiado larga, usando find
la utilidad:
find .. -name \*.bar -exec ln -vs "{}" dest/ ';'
Esto creará enlaces en dest/
o los cambiará .
a la carpeta actual.
Respuesta3
Usarfind
certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;
Además, recuerda utilizarcaminos completos(cuando sea posible) con enlaces simbólicos.
Respuesta4
cp
con -s
la opción puede crear enlaces suaves (o -l
enlaces duros).
Desde el directorio actual se puede utilizar así:
$ cp -s ../path/with/scripts/* .
En tu caso será así:
$ cp -s ../source/*.bar .