cp

cp

The cp command in Unix and Linux is used to copy files and directories. It can copy single files, multiple files, and entire directory trees. Understanding the various options available with cp can help you perform more complex file operations with ease.

Basic Usage

The basic syntax for the cp command is:

cp [options] source destination
  • options: Command-line options to control the behavior of cp.

  • source: The file or directory to be copied.

  • destination: The location where the copy should be placed.

Examples

Copying a Single File

To copy a single file:

cp file1.txt file2.txt

This command copies file1.txt to file2.txt. If file2.txt already exists, it will be overwritten.

Copying Multiple Files

To copy multiple files to a directory:

cp file1.txt file2.txt dir/

This command copies file1.txt and file2.txt to the directory dir.

Copying Directories

To copy a directory and its contents:

cp -r dir1 dir2

This command copies the directory dir1 and all its contents (including subdirectories) to dir2.

Options

-i Option: Interactive Mode

To prompt before overwriting files:

cp -i file1.txt file2.txt

This command prompts the user for confirmation before overwriting file2.txt.

-r Option: Recursive Copy

To copy directories recursively:

cp -r dir1 dir2

This command copies the directory dir1 and its contents to dir2.

-a Option: Archive Mode

To preserve the structure and attributes of files and directories:

cp -a dir1 dir2

This command preserves all attributes, including symbolic links, file permissions, and timestamps, when copying dir1 to dir2.

-u Option: Update Mode

To copy only when the source file is newer than the destination file or when the destination file is missing:

cp -u file1.txt file2.txt

This command copies file1.txt to file2.txt only if file1.txt is newer or if file2.txt does not exist.

-v Option: Verbose Mode

To display detailed information about the copy process:

cp -v file1.txt file2.txt

This command outputs detailed information about what is being copied.

-p Option: Preserve File Attributes

To preserve file attributes such as mode, ownership, and timestamps:

cp -p file1.txt file2.txt

This command copies file1.txt to file2.txt and preserves the original file's attributes.

Practical Use Cases

Backup Files

To create a backup of a file:

cp file.txt file.txt.bak

This command creates a backup of file.txt with the name file.txt.bak.

Copying Configuration Files

To copy configuration files to a backup directory:

cp -r /etc/myconfig /backup/myconfig

This command copies the /etc/myconfig directory and its contents to the /backup/myconfig directory.

Updating Files

To update files in a destination directory with newer versions from the source directory:

cp -u /source/* /destination/

This command copies all files from /source to /destination, only overwriting files that are newer.

Summary

The cp command is a fundamental tool for copying files and directories in Unix and Linux environments. With its various options, it provides flexibility for different copy scenarios, such as preserving attributes, copying recursively, and updating files. Understanding these options and practical use cases can greatly enhance your file management capabilities.

help

Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
  -a, --archive                same as -dR --preserve=all
      --attributes-only        don't copy the file data, just the attributes
      --backup[=CONTROL]       make a backup of each existing destination file
  -b                           like --backup but does not accept an argument
      --copy-contents          copy contents of special files when recursive
  -d                           same as --no-dereference --preserve=links
  -f, --force                  if an existing destination file cannot be
                                 opened, remove it and try again (this option
                                 is ignored when the -n option is also used)
  -i, --interactive            prompt before overwrite (overrides a previous -n
                                  option)
  -H                           follow command-line symbolic links in SOURCE
  -l, --link                   hard link files instead of copying
  -L, --dereference            always follow symbolic links in SOURCE
  -n, --no-clobber             do not overwrite an existing file (overrides
                                 a previous -i option)
  -P, --no-dereference         never follow symbolic links in SOURCE
  -p                           same as --preserve=mode,ownership,timestamps
      --preserve[=ATTR_LIST]   preserve the specified attributes (default:
                                 mode,ownership,timestamps), if possible
                                 additional attributes: context, links, xattr,
                                 all
      --no-preserve=ATTR_LIST  don't preserve the specified attributes
      --parents                use full source file name under DIRECTORY
  -R, -r, --recursive          copy directories recursively
      --reflink[=WHEN]         control clone/CoW copies. See below
      --remove-destination     remove each existing destination file before
                                 attempting to open it (contrast with --force)
      --sparse=WHEN            control creation of sparse files. See below
      --strip-trailing-slashes  remove any trailing slashes from each SOURCE
                                 argument
  -s, --symbolic-link          make symbolic links instead of copying
  -S, --suffix=SUFFIX          override the usual backup suffix
  -t, --target-directory=DIRECTORY  copy all SOURCE arguments into DIRECTORY
  -T, --no-target-directory    treat DEST as a normal file
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -x, --one-file-system        stay on this file system
  -Z                           set SELinux security context of destination
                                 file to default type
      --context[=CTX]          like -Z, or if CTX is specified then set the
                                 SELinux or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit

man

NAME
       cp - copy files and directories

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --archive
              same as -dR --preserve=all

       --attributes-only
              don't copy the file data, just the attributes

       --backup[=CONTROL]
              make a backup of each existing destination file

       -b     like --backup but does not accept an argument

       --copy-contents
              copy contents of special files when recursive

       -d     same as --no-dereference --preserve=links

       -f, --force
              if an existing destination file cannot be opened, remove it and try again (this op‐
              tion is ignored when the -n option is also used)

       -i, --interactive
              prompt before overwrite (overrides a previous -n option)

       -H     follow command-line symbolic links in SOURCE

       -l, --link
              hard link files instead of copying

       -L, --dereference
              always follow symbolic links in SOURCE

       -n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

       -P, --no-dereference
              never follow symbolic links in SOURCE

       -p     same as --preserve=mode,ownership,timestamps

       --preserve[=ATTR_LIST]
              preserve the specified attributes (default: mode,ownership,timestamps), if possible
              additional attributes: context, links, xattr, all

       --no-preserve=ATTR_LIST
              don't preserve the specified attributes
      --parents
              use full source file name under DIRECTORY

       -R, -r, --recursive
              copy directories recursively

       --reflink[=WHEN]
              control clone/CoW copies. See below

       --remove-destination
              remove  each  existing destination file before attempting to open it (contrast with
              --force)

       --sparse=WHEN
              control creation of sparse files. See below

       --strip-trailing-slashes
              remove any trailing slashes from each SOURCE argument

       -s, --symbolic-link
              make symbolic links instead of copying

       -S, --suffix=SUFFIX
              override the usual backup suffix

       -t, --target-directory=DIRECTORY
              copy all SOURCE arguments into DIRECTORY

       -T, --no-target-directory
              treat DEST as a normal file

       -u, --update
              copy only when the SOURCE file is newer than the destination file or when the  des‐
              tination file is missing

       -v, --verbose
              explain what is being done

       -x, --one-file-system
              stay on this file system

       -Z     set SELinux security context of destination file to default type

       --context[=CTX]
              like  -Z,  or if CTX is specified then set the SELinux or SMACK security context to
              CTX

       --help display this help and exit
       --version
              output version information and exit

       By default, sparse SOURCE files are detected by a crude heuristic  and  the  corresponding
       DEST  file is made sparse as well.  That is the behavior selected by --sparse=auto.  Spec‐
       ify --sparse=always to create a sparse DEST file whenever the SOURCE file contains a  long
       enough sequence of zero bytes.  Use --sparse=never to inhibit creation of sparse files.

       When  --reflink[=always]  is  specified, perform a lightweight copy, where the data blocks
       are copied only when modified.  If this is not  possible  the  copy  fails,  or  if  --re‐
       flink=auto  is  specified,  fall back to a standard copy.  Use --reflink=never to ensure a
       standard copy is performed.

       The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.   The  version
       control  method may be selected via the --backup option or through the VERSION_CONTROL en‐
       vironment variable.  Here are the values:

       none, off
              never make backups (even if --backup is given)

       numbered, t
              make numbered backups

       existing, nil
              numbered if numbered backups exist, simple otherwise

       simple, never
              always make simple backups

       As a special case, cp makes a backup of SOURCE when the force and backup options are given
       and SOURCE and DEST are the same name for an existing, regular file.

Last updated