How the cp Command Works on Linux

Johnny Simpson - Mar 24 '22 - - Dev Community

The cp command (not to be confused with cd), allows us to copy files or directories. As such it is very commonly used on Linux and Unix like systems like MacOS.

The syntax for cp is shown below, where [OPTIONS] are optional settings we can change, SOURCE is one or more files/directories we want to copy, and LOCATION is where we want to copy them to:

cp [OPTIONS] SOURCE LOCATION
Enter fullscreen mode Exit fullscreen mode

How to copy files with cp on Linux and MacOS

At its most basic, we can use cp to copy a file or directory to a new location. For example, the following command will copy a file called my-file-1.txt to a directory called test:

cp my-file-1.txt ./test
Enter fullscreen mode Exit fullscreen mode

In the above example, we don't give a file name, so the original file name is used. If we add a file name, we can copy the file with a new name. The following example will copy the file, and save it as new-file.txt in the test directory:

cp my-file-1.txt ./test/new-file.txt
Enter fullscreen mode Exit fullscreen mode

If the file already exists, it will be overwritten. If you want to avoid that, just add the -n option, which will prevent any duplicate files from being overwritten:

cp -n my-file-1.txt ./test
Enter fullscreen mode Exit fullscreen mode

If you'd instead like to confirm when a file is going to be overwritten, use the -i option. This will trigger a prompt asking if you want to overwrite it:

cp -i my-file-1.txt ./test
Enter fullscreen mode Exit fullscreen mode

On Linux only, you can also use the -u option, which will only overwrite files if the file is older than the file you want to overwrite it with. This will not work on MacOS.

cp -u my-file-1.txt ./test
Enter fullscreen mode Exit fullscreen mode

Finally, if you want a response whenever a cp command is complete, use -v to get a verbose message which will tell you exactly what's happened:

cp -v my-file-1.txt ./test
# my-file-1.txt -> ./test/my-file-1.txt
Enter fullscreen mode Exit fullscreen mode

Maintaining file permissions when copying a file on Linux and Mac

If you want to maintain all the permissions that existed on the file you are copying when you copy it to its new directory, use the -p option. If you don't, the owner will be whoever is using the cp file:

cp -p my-file-1.txt ./test
Enter fullscreen mode Exit fullscreen mode

How to copy directories with cp on Linux and Mac

So far we've looked at how to copy files. If we want to copy directories, we need to use the -R option, which stands for recursive. When we use this option, we copy the entire directory and all its children to a new location. For instance, to copy the test directory and call this copied directory newTest, you would write the following in terminal:

cp -R ./test ./newTest
Enter fullscreen mode Exit fullscreen mode

How to copy multiple files and directories with cp

To copy multiple items at once, list them all out, and have the last location as the place where you want to copy all that stuff to. For example:

cp my-file-1.txt my-file-2.txt my-file-3.txt ./newTest
Enter fullscreen mode Exit fullscreen mode

And if you want to include folders when you copy multiple things, use the -R option:

cp -R my-file-1.txt my-file-2.txt ./test ./newTest
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .