This tutorial covers the basic usage of the cp command for copying directories in Linux. It contains examples of copying single directories, multiple directories and directories containing spaces in their names.
What is the cp command?
cp is a command-line utility for copying files and directories from one place to another. It supports copying one or more files and directories and provides various options as well as the flexibility to batch-copy. Unlike the mv command, cp leaves the original file unchanged. The cp command is particularly useful for large copy jobs or tasks where multiple files and directories need to be copied.
How to copy a directory with cp
By default, the cp command will only copy files. It will return an error if attempting to copy a directory without specifying that the source is, in fact, a directory.
To copy a directory, the cp command must contain the options -r or -a. These options instruct cp to copy recursively from a source directory to a new destination. In the following examples, directory1 and all its contents will be copied into directory2:
$ cp -r directory1 directory2
Using the -a option:
$ cp -a directory1 directory2
Copy multiple directories with cp
To copy multiple directories using the cp command, separate the source directories with a space followed by the destination at the end. In the following example, both directory1 and directory2 will be copied into NewDirectory as sub-folders:
$ cp -r directory1 directory2 NewDirectory
The new folder structure will be like this:
.
├── directory1
├── directory2
└── NewDirectory
├── directory1
└── directory2
Directory names with spaces
Directory names containing spaces can be copied by enclosing the directory name in either single or double quotes in the command. In the following example, the directory My Docs is to be copied:
$ cp -r 'My Docs' NewDirectory
or…
$ cp -r "My Docs" NewDirectory
Some nuances when copying directories
Copying a single directory to another directory will work even if NewDirectory does not exist. The command will create NewDirectory and copy directory1 into the new destination:
$ cp -r directory1 NewDirectory
However, when copying multiple directories, if NewDirectory does not exist, the cp command will fail:
$ cp -r directory1 directory2 NewDirectory
cp: target 'NewDirectory' is not a directory
Workaround this by ensuring the destination directory exists beforehand. Alternatively, combine mkdir with cp in the same command:
$ mkdir NewDirectory && cp -r directory1 directory2 NewDirectory
