Cp (Unix)

{{Short description|Shell command that copies file}}

{{lowercase}}

{{Infobox software

| name = cp

| logo =

| screenshot = Cp-example-command-gimp.gif

| screenshot size =

| caption = Example usage of cp command

| author = AT&T Bell Laboratories

| developer = Various open-source and commercial developers

| released = {{Start date and age|1971|11|03}}

| latest release version =

| latest release date =

| 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

| website =

}}

cp is a shell command for copying files and directories.

If the user has write access to a target file, the command copies the content by opening it in update mode. This preserves the file's inode instead of creating a new file with default permissions.

The command was part of Version 1 Unix,{{cite tech report |first1=M. D. |last1=McIlroy |author-link1=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |title=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}} and is specified by POSIX. The implementation from GNU has many additional options beyond the POSIX specification.{{cite web|url=https://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html#cp-invocation|title=GNU Coreutils: cp invocation|website=GNU }} The command is bundled in GNU Core Utilities{{Cite web|url=https://linux.die.net/man/1/cp|title=Cp(1): Copy files/Directories - Linux man page}} and is available in the EFI shell.{{cite web

| url = http://software.intel.com/en-us/articles/efi-shells-and-scripting/

| title = EFI Shells and Scripting

| publisher = Intel

| access-date = 2013-09-25

}}

Options

  • -f (force) – specifies removal of each target file if it cannot be opened for write operations; removal precedes any copying
  • -H (dereference) – follows symbolic links so that the destination has the target file rather than a link to the target
  • -i (interactive) – prompts user to overwrite each target file that clashes with a source file
  • -n (no clobbering) – prevents overwriting files
  • -p (preserve) – preserves metadata of each source file in the destination; including: time of last modification and last access, ownership, and file permissions
  • -R or -r (recursive) – copy directories recursively

Modes

The command has three principal modes of operation as inferred from command-line arguments.{{Cite web | url=https://www.man7.org/linux/man-pages/man1/cp.1.html | title=Cp(1) - Linux manual page }}

=Copy file=

For a path to an existing file followed by a path that does not refer to an existing directory, the file at the first path is copied to the second path.

cp [-fHip][--] sourcefile targetfile

=Copy files to directory=

For one or more paths to existing files followed by a path to an existing directory, the files are copied to the directory.

cp [-fHip] [--] sourcefile... targetdirectory

=Copy directory=

With the recurse command-line option, typically {{code|-r}}, a path to an existing directory and a second path, the files of the directory are copied to the second path. If the second path refers to nothing, the source directory is copied to that path. If the second path refers to an existing directory, the source directory is copied into the destination directory as a subdirectory.

cp -r|-R [-fHip] [--] sourcedirectory... targetdirectory

Examples

This copies file prog.c to file prog.bak. If prog.bak does not already exist, this creates it. If it does exist, its content will be replaced.

cp prog.c prog.bak

This copies the files jones and smith into the pre-existing directory clients.

cp jones smith clients

This copies file smith to a file named smith.jr. Instead of creating a file with the current date and time stamp, the command copies the date and time from the original. The copy also receives other metadata from the original including access control protection.

cp -p smith smith.jr

This reclusively copies the directory clients, including its files, subdirectories, and the files in those subdirectories, to a new directory customers/clients.

cp -R clients customers

Some implementations behave differently in recursive mode, depending on the termination of the directory path. Using cp -R clients/ customers in the GNU implementation behaves as above. However, with a BSD implementation, it copies the contents of the clients directory, instead of the directory clients itself. The same happens in both GNU and BSD implementations if the path of the source directory ends in . or .. (with or without trailing slash).

See also

{{Wikibooks|Guide to Unix/Commands/File System Utilities#cp}}

  • {{Annotated link|copy (command)|copy}}
  • {{Annotated link|cpio}}
  • {{Annotated link|GNU Core Utilities}}
  • {{Annotated link|List of POSIX commands}}
  • {{Annotated link|mv (Unix)|mv}}
  • {{Annotated link|Rm (Unix)|rm}}
  • progress – Linux tool to show progress for cp, mv, dd{{Cite web|url=https://linux.die.net/man/1/progress|title=Progress(1) - Linux man page}}{{Cite web|url=https://github.com/Xfennec/progress|title = Progress - Coreutils Progress Viewer|website = {{Annotated link|GitHub}}|date = 14 November 2021}}
  • {{Annotated link|rsync}}
  • {{Annotated link|Secure copy|scp}}
  • {{Annotated link|tar (computing)|tar}}
  • {{Annotated link|uUCP|uucp}}

References

{{Reflist}}