Cp (Unix) Explained

cp
Author:AT&T Bell Laboratories
Developer:Various open-source and commercial developers
Programming Language:Plan 9: C
Operating System:Unix, Unix-like, Plan 9, Inferno, KolibriOS
Platform:Cross-platform
Genre:Command
License:coreutils

GPLv3
Plan 9: MIT License

In computing, cp is a command in various Unix and Unix-like operating systems for copying files and directories. The command has three principal modes of operation, expressed by the types of arguments presented to the program for copying a file to another file, one or more files to a directory, or for copying entire directories to another directory.[1]

The utility further accepts various command line option flags to detail the operations performed. The two major specifications are POSIX cp and GNU cp. GNU cp has many additional options over the POSIX version.[2]

The command is also available in the EFI shell.[3]

History

cp was part of Version 1 Unix.[4] The version of cp bundled in GNU coreutils was written by Torbjorn Granlund, David MacKenzie, and Jim Meyering.[5]

Operating modes

cp has three principal modes of operation. These modes are inferred from the type and count of arguments presented to the program upon invocation.

Usage

Copying a file to another file: cp [-fHip][--] sourcefile targetfile

Copying file(s) to a directory cp [-fHip] [--] sourcefile... targetdirectory

Copying a directory to a directory (-r or -R must be used) cp -r|-R [-fHip] [--] sourcedirectory... targetdirectory

Option flags

Examples

Creating a copy of a file in the current directory: cp prog.c prog.bakThis copies prog.c to prog.bak. If the prog.bak file does not already exist, the cp command creates it. If it does exist, the cp command replaces its contents with the contents of the prog.c file.

Copy two files in the current directory into another directory: cp jones smith /home/nick/clientsThis copies the files jones to /home/nick/clients/jones and smith to /home/nick/clients/smith.

Copy a file to a new file and preserve the modification date, time, and access control list associated with the source file: cp -p smith smith.jrThis copies the smith file to the smith.jr file. Instead of creating the file with the current date and time stamp, the system gives the smith.jr file the same date and time as the smith file. The smith.jr file also inherits the smith file's access control protection.

Copy a directory, including all its files and subdirectories, to another directory: cp -R /home/nick/clients /home/nick/customersThis copies the directory clients, including all its files, subdirectories, and the files in those subdirectories, to the directory customers/clients. Some Unix systems behave differently in this mode, depending on the termination of directory paths. Using cp -R /home/nick/clients/ /home/nick/customers on a GNU system it behaves as expected; however, on a BSD system, it copies all the contents of the "clients" directory, instead of the directory clients itself. The same happens in both GNU and BSD systems if the path of the source directory ends in . or .. (with or without trailing slash).

The copying of a file to an existing file is performed by opening the existing file in update mode, thereby preserving the files inode, which requires write access and results in the target file retaining the permissions it had originally.

Related Unix commands

See also

Notes and References

  1. Web site: Cp(1) - Linux manual page .
  2. Web site: GNU Coreutils: cp invocation. GNU .
  3. Web site: EFI Shells and Scripting . . 2013-09-25.
  4. M. D. . McIlroy . Doug McIlroy . 1987 . A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 . CSTR . 139 . Bell Labs.
  5. Web site: Cp(1): Copy files/Directories - Linux man page.
  6. Web site: Progress(1) - Linux man page.
  7. Web site: Progress - Coreutils Progress Viewer. GitHub. 14 November 2021.