8.- Preservar enlaces duros y simbólicos al copiar
Los enlaces duro y simbólicos son una práctica muy común en linux así que es probable que en algún momento vayas a necesitar hacer la copia de algunos archivos que en realidad son enlaces y esta opción de va a ser muy útil.
El comando cp sin parámetros copia los enlaces como un archivo en vez de copiar el enlace. Para copiar manteniendo los enlaces puedes utilizar el parámetro -d. Mira la diferencia de al comento de copiar un enlace en el siguiente ejemplo:
$ ls -l -rw-r--r-- 1 lm lm 12 Jul 21 18:40 archivo.txt lrwxrwxrwx 1 lm lm 11 Jul 21 19:43 enalce-archivo.txt -> archivo.txt
Aquí tenemos un enlace «enlace-archivo.txt» que apunta a «archivo.txt» y al momento de hacer una copia sin parámetros de «enlace-archivo.txt» lo que se copia es un archivo nuevo de nombre «nuevo-enlace».
$ cp enalce-archivo.txt nuevo-enalce $ ls -l -rw-r--r-- 1 lm lm 12 Jul 21 18:40 archivo.txt lrwxrwxrwx 1 lm lm 11 Jul 21 19:43 enalce-archivo.txt -> archivo.txt -rw-r--r-- 1 lm lm 12 Jul 21 19:43 nuevo-enalce
Veamos ahora la diferencia de este compoartamiento cuando se utilizar el parámetro -d
$ cp -d enalce-archivo.txt nuevo-enalce $ ls -l -rw-r--r-- 1 lm lm 12 Jul 21 18:40 archivo.txt lrwxrwxrwx 1 lm lm 11 Jul 21 19:43 enalce-archivo.txt -> archivo.txt lrwxrwxrwx 1 lm lm 11 Jul 21 19:48 nuevo-enalce -> archivo.txt
Puedes ver que ahora «nuevo-enlace» es efectivamente un enlace a «archivo.txt»
9.- No sobre escribir al copiar un archivo
El comando cp también tiene un parámetro para evitar que un archivo se sobre escriba al copiar un achivo, si ese archivo ya existe en la ubicación de destino y no deseas que se sobre escriba puedes utilizar la opción -n
cp -n archivo.tx ./respaldo
10.- Pedir confirmación antes de sobre escribir
Cuando deseas realizar la copia de uno o varios archivos y deseas que algunos si se sobre escriban y otro no puedes utilizar la opción -i que te solicita una respuesta «y» o «s» para confirmar la copia y se sobre escriba o «n» para omitir la copia de ese archivo y así evitar que se sobre escriba.
cp -i archivo ./respaldo/
En este ejemplo vemos como se solicita confirmación en ambos casos en uno respondemos que no y en otro que sí, además usamos la opción -v para tener un mensaje de confirmación de la copia. Este es el ejemplo al responder «no»
$ cp -iv archivo.txt ./respaldo/ cp: overwrite ‘./respaldo/archivo.txt’? n
El siguiente ejemplo es cuando indicamos que si deseamos que se sobre escriba el archivo.
$ cp -iv archivo.txt ./respaldo/ cp: overwrite ‘./respaldo/archivo.txt’? y ‘archivo.txt’ -> ‘./respaldo/archivo.txt’
Como vemos en este último ejemplo la línea final indica que el archivo se ha copiado al directorio «respaldo».
11.- Crear enlaces duros en vez de copiar
Cuando deseas crear enlaces duros en vez de copiar los archivos puedes utilizar la opción -l, el uso de este parámetro no realizará una copia del archivo sino que creará un enlace duro (o hard link) hacia el archivo.
$ cat archivo.txt 123 456 789
Si tu tienes un texto en «archivo.txt» puedes utilizar el parámetro -l para crear un enlace duro del archivo dentro del directorio «respaldo»
cp -l archivo.txt ./respaldo/enlace-duro
Si se consulta el valor de «enlace-duro» y luego se modificas el valor de «archivo.txt» te darás cuenta que al volver valor de «enlace-duro» también cambió pues no es un archivo individual sino que apunta «archivo.txt». Mira el ejemplo:
$ cat ./respaldo/enlace-duro 123 456 789 $ echo "1234 5678 9012" > archivo.txt $ cat ./respaldo/enlace-duro 1234 5678 9012
12.- Crear enlaces simbólicos al copiar
Los enlaces simbólicos son mas comunes y también puedes crear este tipo de enlaces cuando usas el comando linux cp, en vez de hacer copias los archivos.
$ cp -s archivo.txt enlace-simbolico $ ls -l -rw-r--r-- 2 lm lm 15 Jul 22 10:58 archivo.txt lrwxrwxrwx 1 lm lm 11 Jul 22 11:14 enlace-simbolico -> archivo.txt
Es importante mencionar que con la opción -s solo se pueden hacer enlaces simbólicos en el directorio actual.
13.- Copiar sin seguir los enlaces simbólicos
Cundo copiamos algún directorio que tiene enlaces simbólicos es importante saber como queremos copiar esos enlaces. No seguir los enlaces simbólicos copiará esos enlaces y seguirán siendo enlaces hacia los archivos que apuntan y esto se logra con el parámetro -P . Mira el ejemplo:
$ ls -l lrwxrwxrwx 1 lm lm 30 Jul 22 11:22 archivo-numeros.txt -> /home/lm/Documents/archivo.txt drwxr-xr-x 2 lm lm 4096 Jul 22 11:13 respaldo $ cp -P archivo-numeros.txt ./respaldo/ $ ls -l respaldo/ lrwxrwxrwx 1 lm lm 30 Jul 22 11:26 archivo-numeros.txt -> /home/lm/Documents/archivo.txt
Si te fijas la copia que se hizo dentro del directorio «respaldo» se ha copiado como un enlace simbólico que apunta al mismo archivo en la carpeta /home/lm/Documents/
14.- Copiar siguiendo los enlaces simbólicos
En ocasiones son útiles lo enlaces simbólicos pero hay ocasiones que requieres que los archivos reales estén en una ubicación, para hacer una copia de este tipo es necesario seguir los enlaces simbólicos y hacer una copia real del archivo. Para hacer esto puedes usar el parámetro -L. Aquí te muestro la diferencia respecto al ejemplo anterior.
$ ls -l lrwxrwxrwx 1 lm lm 30 Jul 22 11:22 archivo-numeros.txt -> /home/lm/Documents/archivo.txt drwxr-xr-x 2 lm lm 4096 Jul 22 11:13 respaldo $ cp -L archivo-numeros.txt ./respaldo/ $ ls -l respaldo/ -rw-r--r-- 1 lm lm 12 Jul 22 11:41 archivo-numeros.txt -rw-r--r-- 1 lm lm 15 Jul 22 10:58 enlace-duro
Si observas el archivo que estas copiando «archivos-numeros.txt» es un enlace simbólico, y al momento de copiarlo con el parámetro -L el archivo que se copia dentro del directorio respaldo es un archivo común y corriente, a diferencia del ejemplo anterior donde era también un enlace simbólico.
By Miguel 08/21/2015 - 10:28 am
Buena explicación
By Luis Armando Medina 08/22/2015 - 10:38 am
Hola Miguel, gracias por tu comentario. No olvides compartir el post en tus redes sociales y dale like al blog.