Using cp Command in Linux

get familiar with the cp command for copying files and directories in the Linux command line.
Warp Terminal

The cp command is one of the essential Linux commands you probably will be using on a regular basis.

As the name indicates, cp stands for copy and it is used for copying files and directories in Linux command line.

It's one of the simpler commands with only a few options but that doesn't mean you cannot know more about it.

Before you see some practical examples of the cp command, I advise getting familiar with the concept of absolute and relative paths because you'll need to use them while copying files from one place to another.

Absolute vs Relative Path in Linux: What’s the Difference?
In this essential Linux learning chapter, know about the relative and absolute paths in Linux. What’s the difference between them and which one should you use.

Copy a file

The simplest and most common use of the cp command is for copying files. For that, you just have to specify the source file and the destination where you want to 'paste' the file.

cp source_file destination_directory
Copy a file from the source directory to a destination
Copy a file

Rename the file while copying it

You can also rename the file while copying it to another location. This is like those 'save as' options you see in text editors.

For this, you must mention the new file name along with the path.

cp source_file destination_directory/new_filename
Rename the file while copying
Rename the file while copying

Copy multiple files

You can also copy multiple files to another location.

cp file1 file2 file3 destination_directory
Copy multiple files, with destination directory at the end
Copy multiple files

You cannot rename files in this case.

Of course, you can use wildcard expansion and copy files of a certain type to another location:

cp *.txt destination_directory
Copy multiple files with Wildcard expansion, which is all files with .txt extension
Copy multiple files with Wildcard expansion

Avoid overwriting while copying files

If you are copying file1.txt to a directory where there already exists a file named file1.txt, it will be overwritten with the file you are copying.

You may not always want that. This is why the cp command provides several options to deal with overwriting.

The firstmost is the interactive mode with the option -i. In the interactive mode, it will ask you to confirm or deny the overwriting of the destination file.

cp -i source_file destination_directory
cp: overwrite 'destination_directory/source_file'?

Press Y to overwrite and N to skip copying the file.

Overwrite, but ask interactively (content overwritten)
Overwrite, but ask interactively (content overwritten)
Overwrite, but ask interactively (content is NOT overwritten)
Overwrite, but ask interactively (content is NOT overwritten)

The option -n negates overwriting completely. Destination files won't be overwritten with this option.

cp -n source_file destination_directory
Negated Overwriting (content of the file inside the directory has not changed)
Negated Overwriting (content inside has not changed)

There is also an option -b for automatically creating a backup if the destination file is going to be overwritten. B stands for backup, I presume.

cp -b source_file destination_directory
Overwriting a file, but with a backup file appended by '~'
Overwriting a file, but with a backup

And lastly, there is the 'update' option -u which will overwrite the destination file if it is older than the source file or if it destination file does not exist.

cp -u source_file destination_directory
The newer file is overwritten into the older file
The newer file is overwritten into the older

Copy directories (folders)

The cp command is also used for copy directories in the Linux command line.

You need to use the recursive option -r for copying directories.

cp -r source_dir destination_dir
Copy a directory using cp command in Linux

You can also copy multiple directories to another location:

cp -r dir1 dir2 dir3 target_directory
Copying multiple directories using cp command

Preserve attributes while copying

When you copy a file to another location, its timestamp, file permission and even ownership gets changed.

That's the normal behavior. But in some cases, you may want to preserve the original attribute even when you are copying the file.

To preserve the attributes, use the option -p:

cp -p source_file destination_directory
πŸ’‘

There is also -a option for archive mode. It will preserve even the ACLs.

πŸ‹οΈ Exercise time

Want to practice the cp command a little? Here are some simple exercises for you.

  • Open a terminal and create a directory named practice_cp
  • Now, copy the /etc/services file in this newly created directory.
  • Make some minor changes to the copied services file in practice directory.
  • Now, copy /etc/services file again but in update mode. Does it change anything? Observe.
  • Look into /var/log directory and copy the log files that start with mail into your practice directory
  • Now, go back to your home directory and create a new directory named new_dir (well, I couldn't think of any better)
  • Copy the practice_cp directory to new_dir

That should be good enough exercise for you. Enjoy learning Linux commands with It's FOSS.

About the author
Abhishek Prakash

Abhishek Prakash

Created It's FOSS 11 years ago to share my Linux adventures. Have a Master's degree in Engineering and years of IT industry experience. Huge fan of Agatha Christie detective mysteries πŸ•΅οΈβ€β™‚οΈ

Become a Better Linux User

With the FOSS Weekly Newsletter, you learn useful Linux tips, discover applications, explore new distros and stay updated with the latest from Linux world

itsfoss happy penguin

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to It's FOSS.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.