# Cp (Unix)

cp es un comando de la familia de los Sistemas Operativos Unix que permite copiar archivos y directorios. El comando posee tres modos de operación, indicados según su invocación, lo cual posibilita copiar un archivo en otro, uno o más archivos a un directorio, o bien un directorio en otro.
Es muy importante aclarar que existen variaciones del comando cp entre los Sistemas Operativos de la familia Unix, básicamente con la adición de nuevos parámetros. Aun así respetan el estándar POSIX, lo cual garantiza una compatibilidad básica entre todos ellos.

## Modo de operación

El comando cp posee tres modos de operar, los cuales se deducen según los argumentos pasados en su invocación. Esto puede ser cuando se le indica a cp lo siguiente:
* Dos archivos: el comando copia el contenido del primer archivo al segundo, creando este último si fuere necesario.
* N archivos seguidos de un directorio: cp copia los N archivos en el directorio indicado, creándolos si fuera necesario.
* Dos directorios: el comando copia todos los archivos y subdirectorios del primer directorio al segundo. Este modo requiere del parámetro r. Si el directorio usado como destino existe el primer directorio es copiado dentro del mismo, sino es creado.

## Modo de uso

La invocación del comando tiene el siguiente formato según la versión POSIX:
En caso de tratarse que ORIGEN sea uno o varios archivos su invocación consiste en:
Por otro lado en caso de que ORIGEN sea un directorio, obligatoriamente debe indicarse el uso recursivo (-r o -R) y se habilitan la utilización de determinados parámetros:
A continuación se detallan los parámetros:

### -f

    Si el destino no puede ser escrito, procede a eliminarlo. Esto se realiza previo a que cp comience a operar.

### -p

    Se incluyen los atributos de ORIGEN en DESTINO. Esto se refiere a la fecha de modificación, fecha de acceso, ID de usuario y grupo, permisos, etc.

### -i

    Consulta al usuario si sobrescribe o no el Destino en caso de que este exista.

### -R, -r

    Copia recursivamente los directorios.

### -H

    Si ORIGEN es un enlace simbólico opera con lo apuntado.

### -L

    Ordena a cp a seguir los enlaces simbólicos dentro de ORIGEN, para que en DESTINO se copie lo apuntado, y no el propio enlace.

### -P

    No se siguen los enlaces simbólicos dentro de ORIGEN, y por ende en DESTINO se copia el mismo enlace.

### Parámetros existentes en la versión GNU Coreutils

Se listan a continuación alguno de los parámetros de la versión de cp presente en los Sistemas Operativos GNU/Linux:

#### -a, --archive

    Equivalente a -dR --preserve=all

#### -b, --backup[=MODO]

    Realiza una copia de seguridad (backup) por cada archivo existente en DESTINO
    MODO:

      #### 'none', 'off'

          Nunca hacer backup.

      #### 'numbered', 't'

          Hacer backups numerados.

      #### 'existing', 'nil'

          Hacer backups numerados de aquellos archivos que lo posean, y simple backup de los otros.

      #### 'simple', 'never'

          Hacer backup simples.

#### -d

    equivalente a --no-dereference --preserve=links

#### --force

    Equivalente al -f (POSIX)

#### --interactive

    Equivalente al -i (POSIX)

#### --dereference

    Equivalente al -L (POSIX)

#### -n, --no-clobber

    No sobrescribir un archivo existente. El parámetro -i queda sin efecto.

#### --no-dereference

    Equivalente al -P (POSIX)

#### -p, --preserve[=LISTA DE ATRIBUTOS]

    Equivalente a -p (POSIX). Si no se indican atributos la opción default es: mode, ownership, timestamps.
    LISTA DE ATRIBUTOS:

      #### 'mode'

          preserva los bits de modo y las listas de control de acceso.

      #### 'ownership'

          conserva al usuario y grupo dueños.

      #### 'timestamps'

          conserva los tiempos de acceso y modificación.

      #### 'links'

          preserva en los archivos de destino cualquier enlace que exista entre los archivos de origen.

      #### 'context'

          conserva el contexto de seguridad de SELinux

      #### 'xattr'

          conserva los atributos extendidos.

      #### 'all'

          conserva todos los atributos.

#### --no-preserve[=LISTA DE ATRIBUTOS]

    No preserva los atributos. Su uso es idéntico a --preserve.

#### --recursive

    Equivalente a -r o -R (POSIX)

#### -S, --suffix=SUFFIX

    Define el sufijo usado en los backups (-b)

#### -t, --target-directory=DIRECTORIO

    Copiar todos los archivos definidos en ORIGEN dentro de DIRECTORIO

#### -T, --no-target-directory

    Considera a DESTINO como un archivo

#### -u, --update

    Copia solamente cuando ORIGEN es más nuevo que DESTINO, o bien este último no posee definido tiempo de modificación.

## Ejemplos

Creando una copia de un archivo en el mismo directorio::
Copiar dos archivos en un directorio (misFotos/vacaciones):
Copiar múltiples archivos usando comodines:
Copiar un directorio, incluyendo sus archivos y subdirectorios, a otro directorio: