Comandos Linux: cp

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:

  1. Tiempo y fecha de modificación
  2. Tiempo de acceso
  3. Banderas de Archivo
  4. Modo de archivo
  5. ID del usuario (UID)
  6. 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

Luis Armando Medina

Sígueme en Twitter: @larmedina
Sígueme en Facebook: dame un like LuisMedinaMLM

This entry was posted in Comandos Linux and tagged , , , . Bookmark the permalink.

2 Responses to "Comandos Linux: cp"

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*