2009-08-28 8 views
90

quiero enlazar (ln -s) todos los archivos que se encuentran en/mnt/usr/lib/en/usr/lib/LINUX: Enlace todos los archivos de uno a otro directorio

Hay un montón de archivos, ¿Cómo hacerlo rápido? :)

+0

¿Cuántos archivos son "muchos" y qué tan rápido los considera "rápidos"? –

+3

Esto es 50:50 si cabría "serverfault" o "superuser", pero no es programación, entonces no para stackoverflow. –

Respuesta

145
ln -s /mnt/usr/lib/* /usr/lib/ 

Supongo que esto pertenece al superusuario, sin embargo.

+1

Esto no incluye archivos ocultos y vincula directorios completos. Si alguno de estos no es lo que quieres, mira mi respuesta. De lo contrario, es la forma más corta. – Cascabel

+0

Tienes razón. Pero las bibliotecas no están ocultas por lo general. En cualquier caso, los archivos dotfiles están involucrados, su solución es más útil. – flokra

+1

¿señalará la otra carpeta permanentemente? – nmkyuppie

11

ln -s/mnt/usr/lib/*/usr/lib/

14

con las soluciones publicadas no vincular los archivos ocultos. Para incluirlos, intente esto:

cd /usr/lib 
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 

Si llegara a querer crear de forma recursiva los directorios y archivos sólo de enlace (de modo que si se crea un archivo dentro de un directorio, lo que realmente está en /usr/lib no /mnt/usr/lib), usted puede hacer esto:

cd /usr/lib 
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done 
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 
+1

Creo que esto también debería funcionar como una forma de comodín en archivos ocultos, si se han activado los englobamientos extendidos en bash. Combina todo comenzando con un punto, seguido de algo que no sea nada u otro punto (es decir, excluye '. /' Y '../'): 'ln -s/mnt/usr/lib /.! (|.) */usr/lib' – Cascabel

68

GNU cp tiene una opción para crear enlaces simbólicos en lugar de copiar.

cp -rs /mnt/usr/lib /usr/ 

Nota esto es una extensión de GNU no se encuentra in POSIX cp.

+2

Su directorio actual debe ser/usr/para hacer un enlace simbólico de esta manera –

+0

@caf Si el destino es una carpeta existente, entonces la carpeta lib se crea dentro de/usr/folder –

Cuestiones relacionadas