Linux CP Command Help and Examples
Linux CP Command Help and Examples
Description
The cp command is used to make copies of files and directories.
cp syntax
cp quick examples
Make a copy of a file into the same directory:
cp origfile newfile
Creates a copy of the file in the working directory named origfile. The copy will be named
newfile, and will be located in the working directory.
CAREFUL! If the destination file newfile already exists, it will be overwritten without a
confirmation prompt. This is the default behavior for all cp operations.
If you want to be prompted before overwriting a file, use the -i (interactive) option. For
example:
cp -i oldfile newfile
If newfile already exists, you will be prompted:
If you type y (or yes, Y, YES, or any other combination of upper and lowercase of these), then
newfile will be overwritten with a copy of origfile. Typing anything else will abort the
operation.
cp origfile /directory/subdirectory
Creates a copy of the file in the working directory named origfile. The copy will be located in
the directory /directory/subdirectory, and will be named origfile.
cp origfile /directory/subdirectory/.
Same as the above command. The slash-dot (/.) is implied in the above form of the command.
(The dot is a special file in every Linux directory which means "this directory.")
cp origfile /directory/subdirectory/newfile
Creates a copy of the file in the working directory named origfile. The copy will be named
newfile, and will be located in the directory /directory/subdirectory.
cp file* /directory/subdirectory
Copy every file in the working directory whose name begins with file into the directory
/directory/subdirectory. The asterisk ("*") is a wildcard a special character which expands
to match other characters. Specifically, the asterisk wildcard matches zero or more non-
whitespace characters. For instance, this command will copy any files named file, file001,
file.txt, fileone.jpg, file-archive.zip, etc.
cp file*.jpg /directory/subdirectory
Copy every file in the working directory whose name begins with file, and ends with the file
extension .jpg. For instance, it would make copies of any files named file, file001.jpg,
file002.jpg, or file-new.jpg, etc. The copies will be placed into the directory
/directory/subdirectory.
cp -R /one/two /three/four
Copy the directory two (located in the directory /one), and everything two contains, into the
destination directory /three/four. The result will be called /three/four/two. The directory
/three must already exist for the command to succeed. If the directory four does not already
exist in the directory /three, it will be created.
General Overview
Let's say you have a file named picture.jpg in your working directory, and you want to make a
copy of it called picture-02.jpg. You would run the command:
cp picture.jpg picture-02.jpg
...and the file will be copied. Here, picture.jpg is the source of the copy operation, and
picture-02.jpg is the destination. Both files now exist in your working directory.
The source and destination files may also reside in different directories. For instance,
cp /home/chuck/pictures/picture.jpg
/home/chuck/backup/picture.jpg
If you are the user chuck, you can abbreviate your home directory ("/home/chuck") using a
tilde ("~"). For instance,
cp ~/pictures/picture.jpg ~/backup/picture.jpg
Or, perhaps you want to copy multiple files into another directory. To accomplish this, you can
specify multiple files as the source, and a directory name as the destination. Let's say you are
the user sally, and you have a bunch of files in the directory /home/sally/pictures/ named
picture-01.jpg, picture-02.jpg, etc. and you want to copy them into the directory
/home/sally/picture-backup/. This command will do the trick:
cp ~/pictures/picture-*.jpg ~/picture-backup
Here, we use a wildcard (the asterisk, "*") to indicate that the source files are all the files in the
directory /home/sally/pictures whose name starts with "picture-" and has the extension ".jpg".
They will be copied into the directory /home/sally/picture-backup, assuming that directory
already exists. If it doesn't exist, cp will give you an error message, and no files will be copied.
You can also specify multiple source files one after the other, and cp will expect that the final
argument is a directory name, and copy them all there. For instance,
cp ~/pictures/picture-01.jpg ~/pictures/picture-02.jpg ~/picture-
backup
You can use cp to copy entire directory structures from one place to another using the -R
option to perform a recursive copy. Let's say you are the user steve and you have a directory,
/home/steve/files, which contains many files and subdirectories. You want to copy all those
files, and all the subdirectories (and the files and subdirectories they contain), to a new
location, /home/steve/files-backup. You can copy all of them using the command:
cp -R ~/files ~/files-backup
...and the entire directory structure will be copied to the directory /home/steve/files-backup.
When performing a recursive copy:
Another useful trick is to use cp to create symbolic links to your source files. You may already
be familiar with using the ln command to create symlinks; cp is a great way to create multiple
symlinks all at once.
cp will create symbolic links if you specify the -s option. So, for instance,
cp -s file.txt file2.txt
...will create a symbolic link, file2.txt, which points to file.txt.
You can also create symbolic links from multiple source files, specifying a directory as the
destination.
Note: To create symbolic links in another directory, cp needs you to specify the full
pathname, including the full directory name, in your source file name(s). Relative paths
will not work.
Let's say you are user melissa and you have a set of files, file01.txt, file02.txt, etc. in the
directory /home/melissa/myfiles. You want to create symbolic links to these files in the
existing directory /home/melissa/myfiles2. This command will do the trick:
cp -s ~/myfiles/file*.txt ~/myfiles2
The directory myfiles2 will now contain symbolic links to the file*.txt in the directory
/home/melissa/myfiles. The myfiles2 directory must already exist for the operation to succeed;
if it doesn't exist, cp will give you an error message and nothing will be copied.
cp -R -s ~/myfiles ~/myfiles2
There are many other options you can provide to cp which will affect its behavior. These are
listed, along with the precise command syntax, in the following sections.
Options
In accordance with the command syntax above, cp copies the source file SOURCE to the
destination file DEST, or multiple SOURCE file(s) to destination directory DIRECTORY.
--attributes-only Don't copy the file data, just create a file with the same attributes.
-f, --force If an existing destination file cannot be opened, remove it and try
again. This option has no effect if the -n option is used.
-u, --update Copy only when the SOURCE file is newer than the destination
file or when the destination file is missing.
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. Specify --
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, cp performs a lightweight copy, where the data blocks
are copied only when modified. If this is not possible, the copy fails; or, if --reflink=auto is
specified, cp falls back to a standard copy operation.
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX. The version
control method may be selected via the --backup=CONTROL option or through the
VERSION_CONTROL environment variable. Here are the values of
CONTROL/VERSION_CONTROL:
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.
cp examples
cp file1.txt newdir
Copies the file mylog.txt in the public_html directory into the public_html/backup directory
as mylog.bak.
cp -u *.txt newdir
Copy all files ending in .txt into the newdir directory, but only if the files do not already exist
in the new directory, or if the files being copied are newer.
cp -R /home/hope/files/* /home/hope/backup
Recursively copies all the files, directories, and subdirectories in the /home/hope/files
directory into the /home/hope/backup directory. If the directory backup does not exist in the
directory /home/hope, it will be created.
If newfile already exists, make a backup of the existing newfile before overwriting it with a
copy of origfile. By default, the backup of newfile will be named newfile~.
If newfile already exists, make a backup of the existing newfile before overwriting it with a
copy of origfile. The backup of newfile will be named newfile.~1~ if no other backup exists,
or newfile.~2~ if newfile.~1~ exists, etc.
Related commands
dd Copy and convert the encoding of files.
ln Create a link, or a symbolic link, to a file or directory.
mv Move files and directories from one location to another, and optionally rename them.