Tengo un directorio que contiene algunos enlaces simbólicos:
user@host:include$ find .. -type l -ls
4737414    0 lrwxrwxrwx   1 user group       13 Dec  9 13:47 ../k0607-lsi6/camac -> ../../include
4737415    0 lrwxrwxrwx   1 user group       14 Dec  9 13:49 ../k0607-lsi6/linux -> ../../../linux
4737417    0 lrwxrwxrwx   1 user group       12 Dec  9 13:57 ../k0607-lsi6/dfc -> ../../../dfc
4737419    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon
4737420    0 lrwxrwxrwx   1 user group       19 Dec  9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx
4737421    0 lrwxrwxrwx   1 user group       17 Dec  9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat
Necesito copiarlos en el directorio actual. Los enlaces resultantes deben ser independientes de sus prototipos y conducir directamente a sus objetos objetivo.
cp -screa enlaces a enlaces que no es un comportamiento apropiado.cp -s -Lse niega a copiar enlaces a directorioscp -s -L -rse niega a copiar enlaces relativos a un directorio que no funciona
¿Qué tengo que hacer?
                    
                        linux
                                command-line
                                symbolic-link
                                cp
                                
                    
                    
                        Basilevs
fuente
                
                fuente

cp -dhizo el trabajo de mi lado.cp -Ren un macRespuestas:
Desde la página del manual:
Personalmente, uso
cp -avpara la mayoría de mis copias pesadas. De esa manera, puedo preservar todo, incluso recursivamente, y ver el resultado. Por supuesto, eso es solo preferencia personal.En cuanto a por qué sus otras opciones no hicieron lo que esperaba,
-screa un enlace en lugar de copiar y-Lsigue los enlaces en la fuente para encontrar el archivo a copiar en lugar de copiar los enlaces.fuente
-R, porque de lo contrario, cp omitirá directorios y enlaces simbólicos a directorios.cp -a-aopción. Heh, he buscado opciones encpla página de manual de innumerables veces, sin embargo, siempre he pasado por alto esta. Hasta ahora he estado usando-dpr, pero-acubre todos esos, además de la preservación de un par de otros atributos. Si hubiera necesitado estos otros atributos, probablemente habría buscado la--preserveopción nuevamente y la hubiera usado-dr --preserve=all, ¡que es exactamente lo que-aes! Bueno, al menos ahora lo sé,-aes perfecto y esto es lo que usaré de ahora en adelante.--preserve=linksno fue suficiente Todavía lo decíacp: omitting directory. Pero-avfuncionó.Del mismo modo que la página del manual dice, utilice
-P.fuente
-Pno funciona en directorios, así que usécp -acp -Pdiferencia de la respuesta más votada por @kainosnous, funciona para mí. ¡Gracias!Si los enlaces contienen rutas relativas, entonces, copiar el enlace no ajustará la ruta relativa. Use
readlink, con el interruptor-fpara seguir recursivamente, para obtener la ruta absoluta del enlace. Por ejemplo:Si lo que desea es preservar los caminos relativos, entonces la opción
-Pdecp, como dijo Ignacio Vázquez-Abrams, es lo que necesita.fuente
/usr/share/dict/words -> /etc/dictionaries-common/words -> /usr/share/dict/british-englishque especifica el diccionario preferido. Si desreferenciara recursivamente esta cadena, el enlace simbólico resultante ignoraría cualquier cambio futuro a esta preferencia.Como algunos han comentado:
funciona bien.
Del hombre:
fuente
Usé lo siguiente para duplicar un directorio realmente grande. Se conservaron todos los enlaces simbólicos, la copia se realizó de forma recursiva y pude tener algunos comentarios visuales del proceso:
fuente
La mayoría de las veces, cuando necesito copiar muchos enlaces simbólicos, en realidad estoy tratando de reflejar un árbol de directorios. Así que quiero los enlaces simbólicos y todo lo demás.
Esto es excesivo para copiar solo algunos enlaces simbólicos, pero si realmente está intentando copiar un árbol completo, esto puede ser muy útil:
Usa alquitrán .
tar no resuelve el enlace simbólico de manera predeterminada, por lo que los enlaces simbólicos en la copia espejo apuntarán a las mismas ubicaciones que las del árbol original.
Este truco utiliza subcapas para colocar el comando tar en la raíz del directorio que se va a duplicar; puede dejar uno de ellos (junto con el comando cd asociado ) si ya está en los directorios src o dest :
Nuevamente, esto no es apropiado para cada vez que desee copiar enlaces simbólicos, pero es un fragmento muy útil para saber.
fuente
Prueba: cp -pr symlink destination
SO: Centos 5 (Linux)
fuente
En Ubuntu al copiar enlaces y archivos en un directorio:
fuente
cp -des la abreviatura de estocp -aycp --preserve=linkshago más de lo que la pregunta está haciendo. Según tengo entendido, esta es la respuesta correcta para cualquiera que usecp, aunque solo con archivos (sin directorios) como en la pregunta,--no-dereferenceno tendría ningún efecto.Use la
-Popción, como Ignacio Vazquez-Abrams escribió anteriormente . Lo que no mencionó es que-Pno tiene ningún efecto sin él-R. Entonces necesitas al menoscp -RP.(El sitio aún no me deja comentar, así que publiqué una respuesta por separado).
fuente
cp -s y cp -L son comandos especiales. Para su requerimiento, no use ninguno.
por ejemplo, copiar un directorio DIR que contiene ay un enlace simbólico b que apunta a a.
Lo que necesita es N / a (= DIR / a) y N / b -> ../ N / a; así que simplemente copie sin desreferenciar, usando la opción cp -P. Creo que este también es el valor predeterminado para cp.
consulte
man cpocp --helppara más opciones.fuente