¿Cómo hago un enlace simbólico de cada uno de los archivos en un directorio a otro directorio?

15

Si tengo un directorio /foocon algunos archivos en ella, ¿cómo enlazar simbólicamente cada entrada /fooen /bar/?

Por ejemplo, si /footiene los archivos a, by c, quiero crear tres enlaces simbólicos:

  • /bar/a -> /foo/a
  • /bar/b -> /foo/b
  • /bar/c -> /foo/c
Steven
fuente
¿Estás seguro de que no solo quieres enlazar la barra de enlaces simbólicos?
Rich Bradshaw
La aplicación real de esto es que instalé un programa y me gustaría mover sus ejecutables a una carpeta estándar en mi $ PATH en lugar de agregar el instalado a la ruta.
Steven
Parece que sería una mejor idea simplemente configurarlo --prefix=.
Hola71

Respuestas:

18

Puede usar (GNU) cpcon la --symbolic-linkopción:

prompt$ mkdir foo
prompt$ cd foo
prompt$ touch a b c
prompt$ mkdir ../bar
prompt$ cd ../bar
prompt$ cp --symbolic-link ../foo/* .
prompt$ ls -l
total 0
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 a -> ../foo/a
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 b -> ../foo/b
lrwxrwxrwx. 1 hlovdal hlovdal 8 Jun 12 16:24 c -> ../foo/c
prompt$
hlovdal
fuente
Esta parece ser exactamente la solución. ¡Increíble!
Steven
Esto es muy perfecto
noraj
¿alguna forma de hacer que esto también se aplique a los directorios? Cuando ejecuto esto, aparece la advertencia "cp: omitiendo el directorio './baz'"
solidau
15

Prueba esto:

ln -s /foo/* /bar

El directorio de origen, como se especifica en la pregunta, es /foo. Tenga en cuenta que debe especificarse completamente (es decir, comenzando en el directorio raíz), por lo que otros ejemplos se verían así:

ln -s /some/dir/with/baz/* destdir
ln -s /dir/to/link/from/* /dir/to/link/to
ln -s $PWD/stuff/* more/stuff
Pausado hasta nuevo aviso.
fuente
¿esto incluso funciona?
ctrlc-root
@ root.ctrlc: debe especificar la ruta completa de la fuente (que está /en mi respuesta original). Agregaré una aclaración.
Pausado hasta nuevo aviso.
Creo que si desea copiar todo como enlace simbólico con un solo comando, debe usar cp -s como @hlovdal answer, cp -rs /var/www/folder/ .copia todos los archivos de subcarpetas como enlace simbólico, no como ln -s /var/www/folder/ .quién duplicó los archivos de subcarpetas en mi computadora.
baptx
2

¿Algo como esto?

cd /foo
for f in *; do ln -s $PWD/$f /bar; done
garyjohn
fuente