comando cp en Linux con ejemplos

cp significa copia . Este comando se utiliza para copiar archivos o grupos de archivos o directorios. Crea una imagen exacta de un archivo en un disco con un nombre de archivo diferente. El comando cp requiere al menos dos nombres de archivo en sus argumentos.

Sintaxis:

cp [OPTION] Source Destination
cp [OPTION] Source Directory
cp [OPTION] Source-1 Source-2 Source-3 Source-n Directory

First and second syntax is used to copy Source file to Destination file or Directory.
Third syntax is used to copy multiple Sources(files) to Directory.

El comando cp funciona en tres modos principales de operación y estas operaciones dependen del número y tipo de argumentos pasados ​​en el comando cp:

  1. Dos nombres de archivo: si el comando contiene dos nombres de archivo, entonces copia el contenido del primer archivo al segundo archivo . Si el segundo archivo no existe, primero crea uno y el contenido se copia en él. Pero si existiera, simplemente se sobrescribirá sin previo aviso. Así que tenga cuidado cuando elija el nombre del archivo de destino.
    cp Src_file Dest_file
    

    Supongamos que hay un directorio llamado geeksforgeeks que tiene un archivo de texto a.txt .
    Ejemplo:

    $ls
    a.txt
    
    $cp a.txt b.txt
    
    $ls
    a.txt  b.txt
    
  2. Uno o más argumentos: si el comando tiene uno o más argumentos, especificando los nombres de los archivos y siguiendo esos argumentos, un argumento que especifica el nombre del directorio, este comando copia cada archivo de origen en el directorio de destino con el mismo nombre, creado si no existe pero si ya existido entonces será sobreescrito, así que ten cuidado!!.
    cp Src_file1 Src_file2 Src_file3 Dest_directory
    

    Supongamos que hay un directorio llamado geeksforgeeks que tiene un archivo de texto a.txt, b.txt y un directorio de nombre new en el que vamos a copiar todos los archivos.
    Ejemplo:

    $ls
    a.txt  b.txt  new
    
    Initially new is empty
    $ls new
    
    $cp a.txt b.txt new
    
    $ls new
    a.txt  b.txt
    

    Nota: Para este caso, el último argumento debe ser un nombre de directorio . Para que el comando anterior funcione, Dest_directory debe existir porque el comando cp no lo creará.

  3. Dos nombres de directorio: si el comando contiene dos nombres de directorio, cp copia todos los archivos del directorio de origen en el directorio de destino, creando los archivos o directorios necesarios. Este modo de operación requiere una opción adicional, típicamente R , para indicar la copia recursiva de directorios.
    cp -R Src_directory Dest_directory
    

    En el comando anterior, el comportamiento de cp depende de si Dest_directory existe o no. Si Dest_directory no existe, cp lo crea y copia el contenido de Src_directory recursivamente tal como está. Pero si Dest_directory existe, la copia de Src_directory se convierte en un subdirectorio en Dest_directory .

Opciones:

Hay muchas opciones del comando cp , aquí discutiremos algunas de las opciones útiles:
Supongamos que un directorio llamado geeksforgeeks contiene dos archivos que tienen algún contenido llamado a.txt y b.txt . Este escenario es útil para comprender las siguientes opciones.

$ls geeksforgeeks
a.txt  b.txt

$cat a.txt
GFG

$cat b.txt
GeeksforGeeks

1. -i (interactivo): i significa copia interactiva. Con esta opción, el sistema primero advierte al usuario antes de sobrescribir el archivo de destino. cp solicita una respuesta, si presiona y sobrescribe el archivo y con cualquier otra opción lo deja sin copiar.

$cp -i a.txt b.txt
cp: overwrite 'b.txt'? y

$cat b.txt
GFG

2. -b(copia de seguridad): con esta opción, el comando cp crea la copia de seguridad del archivo de destino en la misma carpeta con un nombre diferente y en un formato diferente.

$ls
a.txt  b.txt

$cp -b a.txt b.txt

$ls
a.txt  b.txt  b.txt~

3. -f (forzar): si el sistema no puede abrir el archivo de destino para la operación de escritura porque el usuario no tiene permiso de escritura para este archivo, al usar la opción -f con el comando cp , el archivo de destino se elimina primero y luego se copia. del contenido se realiza desde el archivo de origen hasta el de destino.

$ls -l b.txt
-r-xr-xr-x+ 1 User User 3 Nov 24 08:45 b.txt

User, group and others doesn't have writing permission.

Without -f option, command not executed
$cp a.txt b.txt
cp: cannot create regular file 'b.txt': Permission denied

With -f option, command executed successfully
$cp -f a.txt b.txt

4. -r o -R: copiando la estructura del directorio. Con esta opción , el comando cp muestra su comportamiento recursivo al copiar toda la estructura de directorios de forma recursiva.
Supongamos que queremos copiar el directorio geeksforgeeks que contiene muchos archivos, directorios en el directorio gfg (no existe).

$ls geeksforgeeks/
a.txt  b.txt  b.txt~  Folder1  Folder2

Without -r option, error
$cp geeksforgeeks gfg
cp: -r not specified; omitting directory 'geeksforgeeks'

With -r, execute successfully
$cp -r geeksforgeeks gfg

$ls gfg/
a.txt  b.txt  b.txt~  Folder1  Folder2

5. -p(preservar): Con la opción -p cp conserva las siguientes características de cada archivo fuente en el archivo de destino correspondiente: la hora de la última modificación de datos y la hora del último acceso, la propiedad (solo si tiene permisos para hacer esto) y los bits de permiso del archivo.
Nota: Para la conservación de las características, debe ser el usuario raíz del sistema, de lo contrario, las características cambian.

$ls -l a.txt
-rwxr-xr-x+ 1 User User 3 Nov 24 08:13 a.txt

$cp -p a.txt c.txt

$ls -l c.txt
-rwxr-xr-x+ 1 User User 3 Nov 24 08:13 c.txt

Como podemos ver arriba, tanto a.txt como c.txt (creado copiando) tienen las mismas características.

Ejemplos:

Copiar usando * comodín: El comodín estrella representa cualquier cosa, es decir, todos los archivos y directorios. Supongamos que tenemos muchos documentos de texto en un directorio y queremos copiarlos en otro directorio, toma mucho tiempo si copiamos archivos 1 por 1 o el comando se vuelve demasiado largo si especificamos todos estos nombres de archivo como argumento, pero usando * comodín se vuelve simple.

Initially Folder1 is empty
$ls
a.txt  b.txt  c.txt  d.txt  e.txt  Folder1

$cp *.txt Folder1

$ls Folder1
a.txt  b.txt  c.txt  d.txt  e.txt

Referencias:
Wikipedia

Publicación traducida automáticamente

Artículo escrito por AKASH GUPTA 6 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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