LINUX: Enlace todos los archivos de uno a otro directorio [cerrado]

123

Quiero enlace ( ln -s) todos los archivos que se encuentran en /mnt/usr/lib/en/usr/lib/

Hay muchos archivos, ¿cómo se puede hacer rápidamente? :)

SharpC
fuente
¿Cuántos archivos son "lotes" y qué tan rápido lo consideras "rápido"?
Eric Smith
44
Esto es 50:50 si encajaría en "serverfault" o "superuser", pero no es programación, por lo que no para stackoverflow.
Marc Gravell

Respuestas:

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

Sin embargo, supongo que esto pertenece al superusuario.

Tim Cooper
fuente
66
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 el camino más corto.
Cascabel
Tienes razón. Pero las bibliotecas no suelen estar ocultas. En cualquier caso, los archivos de puntos están involucrados, su solución es más útil.
1
¿Apuntará a la otra carpeta de forma permanente?
nmkyuppie
@YuPPie, supongo, simplemente crea un enlace duro a cada archivo en el directorio. (esto es lo que quería hoy, así que +1: D)
Nombre para mostrar
2
@SargeBorsch Crea enlaces simbólicos (los enlaces duros son diferentes).
jsejcksn
90

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

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

Tenga en cuenta que esta es una extensión GNU que no se encuentra en POSIXcp .

coste y flete
fuente
44
Su directorio actual debe ser / usr / para hacer un enlace simbólico de esta manera
Soul_man
@caf Si el destino es una carpeta existente, entonces la carpeta lib se crea dentro de la carpeta / usr /
Tamil Selvan C
2
Buena respuesta. También se puede usar para crear enlaces duros con -l en lugar de -s.
Fax
19
ln -s /mnt/usr/lib/* /usr/lib/
Michael Krelin - hacker
fuente
15

Las soluciones publicadas no vincularán ningún archivo oculto. 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 únicos de enlace (de modo que si se crea un archivo dentro de un directorio, lo que realmente está en /usr/libno /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
Cascabel
fuente
2
Creo que esto también debería funcionar como una forma de comodín en archivos ocultos, si ha extendido el globbing activado en bash. Coincide con todo lo que comienza con un punto, seguido de algo distinto de nada u otro punto (es decir, excluye ./y ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel