15.- Copiar de forma recursiva
Cuando copiamos una ruta o directorio puede ser necesario copiar el directorio y todo lo que se incluya dentro de ese directorio (archivos, archivos ocultos y otros directorio dentro de este) para realizar esto se cuenta con el parámetro -R o -r (son idénticos)
cp -R directorio respaldo
16.- Copiar solo para actualizar
Al utilizar el comando linux cp con el parámetro -u se realizará la copia de los archivos solo cuando el origen sea mas reciente o el destino no exista, esto puede ser útil cuando se tenga un respaldo incremental, es decir que solo se copiarán al respaldo los archivos que sean mas recientes que los que se encuentran en el respaldo.
Para mostrar un ejemplo supongamos que tenemos un respaldo y una lista de archivos recientemente creados.
$ ls -l -rw-r--r-- 1 lm lm 11 Jul 22 11:58 archivo.txt -rw-r--r-- 1 lm lm 11 Jul 22 11:58 licencia drwxr-xr-x 2 lm lm 4096 Jul 22 11:59 respaldo -rw-r--r-- 1 lm lm 11 Jul 22 11:58 usuarios
En el respaldo solo tenemos almacenado «archivo.txt» y será necesario respaldar solo los archivos nuevos.
$ ls -l respaldo/ -rw-r--r-- 1 lm lm 11 Jul 22 11:59 archivo.txt
Para realizar la copia de los archivos mas recientes se utilizará el parámetro -u de esta forma:
$ cp -u -v archivo.txt licencia usuarios ./respaldo/ ‘licencia’ -> ‘./respaldo/licencia’ ‘usuarios’ -> ‘./respaldo/usuarios’
Si te fijas solo se han copiado los archivo nuevos (que no existían en el destino). Si actualizamos uno de esos archivo volvemos a ejecutar el mismo comando se copiará solo los archivos en los que el origen se mas reciente que los archivos que existen.
$ touch archivo.txt $ cp -u -v archivo.txt licencia usuarios ./respaldo/ ‘archivo.txt’ -> ‘./respaldo/archivo.txt’
Si volvemos a ejecutar el comando y el respaldo se encuentra actualizado no recibiremos nada en la salida de texto pues ningún archivo será copiado
$ cp -u -v archivo.txt licencia usuarios ./respaldo/ $
17.- Copiando con archivado
Cuando queremos copiar un directorio podemos usar -r o -R pero también podemos usar la opción -a para archivar los elementos incluidos en el directorio (archivos y carpetas) y mediante ese archivado crear una copia exacta de esos archivos y directorios, incluyendo enlaces simbólicos.
cp -a directorio respaldo
Mira este ejemplo donde hay enlaces simbólicos y al realizar la copia con -a se hace una copia de todos los archivos, incluyendo los enlaces simbólicos.
$ ls -l respaldo/ lrwxrwxrwx 1 lm lm 30 Jul 22 15:38 archivo-numeros.txt -> /home/lm/Documents/archivo.txt -rw-r--r-- 1 lm lm 11 Jul 22 12:01 licencia -rw-r--r-- 1 lm lm 11 Jul 22 12:01 usuarios $ cp -a respaldo respaldo-nuevo $ ls -l respaldo-nuevo/ lrwxrwxrwx 1 lm lm 30 Jul 22 15:38 archivo-numeros.txt -> /home/lm/Documents/archivo.txt -rw-r--r-- 1 lm lm 11 Jul 22 12:01 licencia -rw-r--r-- 1 lm lm 11 Jul 22 12:01 usuarios
18.- Copiar preservando los atributos del archivo.
Cuando copias un archivo muchos de sus datos se actualizan o se modifican, para realizar una copia de un archivo preservando los atributos del original se usa el parámetro -p. Los atributos de un archivo que son afectados por ese parámetro son:
- Tiempo y fecha de modificación
- Tiempo de acceso
- Banderas de Archivo
- Modo de archivo
- ID del usuario (UID)
- ID del grupo (GID)
Mira este ejemplo donde copiamos el archivo resolv.conf de forma normal.
$ cp /etc/resolv.conf ./ $ ls -l resolv.conf -rw-r--r-- 1 lm lm 193 Jul 22 15:51 resolv.conf
Ahora ve la diferencia cuando realizas la copia del mismo archivo con el parámetro -p para preservar los atributos del archivo.
$ sudo cp -p /etc/resolv.conf ./ $ ls -l resolv.conf -rw-r--r-- 1 root root 193 Jul 22 10:10 resolv.conf
Si haces este ejercicio en la termina y te fijas el propietario y grupo son los el usuario que estas usando, mientras que en el segundo ejemplo son de root, además también la fecha se mantiene.
19.- Eliminando el destino antes de copiar
Tal vez sea una situación muy particular pero es necesario eliminar primero el destino antes de realizar la copia de los archivos, para realizar esto, el comando linux cp tiene una opción llamada –remove-destination. Si la opción -f forzaba la copia y sobre escribía sobre el destino, este parámetro obligatoriamente elimina el archivo si ya existe en el destino y después realiza la copia.
$ cp --remove-destination -v licencia usuarios archivo-numeros.txt respaldo-nuevo/ removed ‘respaldo-nuevo/licencia’ ‘licencia’ -> ‘respaldo-nuevo/licencia’ removed ‘respaldo-nuevo/usuarios’ ‘usuarios’ -> ‘respaldo-nuevo/usuarios’ removed ‘respaldo-nuevo/archivo-numeros.txt’ ‘archivo-numeros.txt’ -> ‘respaldo-nuevo/archivo-numeros.txt’
Para termiar…
El comando linux cp es uno de esos comandos básicos que es muy sencillo de usar, pero que tiene una aplica gama de funciones lo hacen un comando muy versátil y poderoso.
Puedes utilizar el comando man cp o cp –help para acceder a las man pages de este comando y que veas mas detalles de las opciones y características sobre el uso de este comando.
Tu Servidor y Amigo
Sígueme en Twitter: @larmedina
Sígueme en Facebook: dame un like LuisMedinaMLM
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.