¿Cómo crear enlaces simbólicos a todos los archivos (clase de archivos) en un directorio?

¿Cómo crear enlaces simbólicos a todos los archivos (clase de archivos) en un directorio?

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/*.barme da

foo.bar
baz.bar

¿Cómo puedo pasar la lista de parámetros para ln -sque 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, xargsya que parece ser una tarea común, al menos para mí.

Respuesta1

lntoma 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 -vpara mayor detalle.

O si la lista es demasiado larga, usando findla 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

cpcon -sla opción puede crear enlaces suaves (o -lenlaces duros).

Desde el directorio actual se puede utilizar así:

$ cp -s ../path/with/scripts/* .

En tu caso será así:

$ cp -s ../source/*.bar .

información relacionada