Home Linux System Administration How To Copy Directory on Linux

How To Copy Directory on Linux

by schkn

Copying directories on Linux is a big part of every system administrator routine.

If you have been working with Linux for quite some time, you know how important it is to keep your folders well structured.

In some cases, you may need to copy some directories on your system in order revamp your main filesystem structure.

In this tutorial, we are going to see how you can easily copy directories and folders on Linux using the cp command.

Copy Directories on Linux

In order to copy a directory on Linux, you have to execute the “cp” command with the “-R” option for recursive and specify the source and destination directories to be copied.

$ cp -R <source_folder> <destination_folder>

As an example, let’s say that you want to copy the “/etc” directory into a backup folder named “/etc_backup”.

The “/etc_backup” folder is also located at the root of your filesystem.

In order to copy the “/etc” directory to this backup folder, you would run the following command

$ cp -R /etc /etc_backup

By executing this command, the “/etc” folder will be copied in the “/etc_backup”, resulting in the following folder.

copy directory using cp command

Awesome, you successfully copied one folder in another folder on Linux.

But, what if you wanted to copy the content of the directory, recursively, using the cp command?

Copy Directory Content Recursively on Linux

In order to copy the content of a directory recursively, you have to use the “cp” command with the “-R” option and specify the source directory followed by a wildcard character.

$ cp -R <source_folder>/* <destination_folder>

Given our previous example, let’s say that we want to copy the content of the “/etc” directory in the “/etc_backup” folder.

In order to achieve that, we would write the following command

$ cp -R /etc/* /etc_backup

When listing the content of the backup folder, you will come to realize that the folder itself was not copied but the content of it was.

$ ls -l /etc_backup
copy directory recursively on linux

Awesome, you copied the content of the “/etc” directory right into a backup folder!

Copy multiple directories with cp

In order to copy multiple directories on Linux, you have to use the “cp” command and list the different directories to be copied as well as the destination folder.

$ cp -R <source_folder_1> <source_folder_2> ... <source_folder_n>  <destination_folder>

As an example, let’s say that we want to copy the “/etc” directory as well as all homes directories located in the “/home” directory.

In order to achieve that, we would run the following command

$ cp -R /etc/* /home/* /backup_folder
copying multiple directories recursively using cp

Congratulations, you successfully copied multiple directories using the cp command on Linux!

Copy Directories To Remote Hosts

In some cases, you may want to copy a directory in order to keep a backup on a backup server.

Needless to say that your backup server is locally remotely : you have to copy your directory over the network.

Copying using rsync

In order to copy directories to remote locations, you have to use the rsync command, specify the source folder as well as the remote destination to be copied to.

Make sure to include the “-r” option for “recursive” and the “-a” option for “all” (otherwise non-regular files will be skipped)

$ rsync -ar <source_folder> <destination_user>@<destination_host>:<path>

Also, if the “rsync” utility is not installed on your server, make sure to install it using sudo privileges.

$ sudo apt-get install rsync

$ sudo yum install rsync

As an example, let’s say that we need to copy the “/etc” folder to a backup server located at 192.168.178.35/24.

We want to copy the directory to the “/etc_backup” of the remote server, with the “devconnected” username.

In order to achieve that, we would run the following command

$ rsync -ar /etc [email protected]:/etc_backup
directory copy using rsync

Note : we already wrote a guide on transferring files and folders over the network, if you need an extensive guide about it.

Similarly, you can choose to copy the content of the “/etc/ directory rather than the directory itself by appending a wildcard character after the directory to be copied.

$ rsync -ar /etc/* [email protected]:/etc_backup/

Finally, if you want to introduce the current date while performing a directory backup, you can utilize Bash parameter substitution.

$ rsync -ar /etc/* [email protected]:/etc_backup/etc_$(date "+%F")
listing backup files on linux

Note : if you are looking for a tutorial on setting dates on Linux, we have a guide about it on the website.

Copying using scp

In order to copy directory on Linux to remote location, you can execute the “scp” command with the “-r” option for recursive followed by the directory to be copied and the destination folder.

$ scp -r <source_folder> <destination_user>@<destination_host>:<path>

As an example, let’s say that we want to copy the “/etc” directory to a backup server located at 192.168.178.35 in the “/etc_backup” folder.

In order to achieve that, you would run the following command

$ scp -r /etc [email protected]:/etc_backup/
using scp to transfer directories over the network

Congratulations, you successfully copied an entire directory using the scp command.

Very similarly to the rsync command, you can choose to use Bash parameter substitution to copy your directory to a custom directory on your server.

$ scp -r /etc [email protected]:/etc_backup/etc_$(date "+%F")

Conclusion

In this tutorial, you learnt how you can easily copy directories on Linux, whether you choose to do it locally or remotely.

Most of the time, copying directories is done in order to have backups of critical folders on your system : namely /etc, /home or Linux logs.

If you are interested in Linux System Administration, we have a complete section dedicated to it on the website, so make sure to check it out!

You may also like

9 comments

Harold Pedant March 10, 2020 - 4:18 am

“you can easily copy directories and folders on Linux”

What is the difference between a directory and a folder?

HINT: the term folder is a Windows operating system term and has no place in Linux terminology (no matter what GNOME people try to force upon you) except in cases such as “Mail folders” which are virtual representations of directories.

Reply
Michael Klit April 19, 2021 - 4:53 am

People who seek this kind of help really don’t care, and neither should you

Reply
Jiri Hampl April 24, 2021 - 11:19 am

The term “Directory” is very old one. I appears in MS DOS, z/OS, RSX of DEC and many more older systems. The term Folder first appeared in Windows. The authors probably thought that is can be better understood by the non-IT people. There are more “new” terms, different, but meaning the same. Unfortunately. Today it only cause a mess. In fact you should be aware it.

Reply
john smith September 5, 2020 - 1:48 pm

How do i make a copy of one folder and put it in to several destination folders?

Reply
Jiri Hampl April 8, 2021 - 9:18 am

To copy the whole file structure in Unix, including Ubuntu, you can use the old and good Midnight commander (MC). To connect an external disk in it, go to media – user. More user friendly than cp -r command.

Reply
Jiri Hampl July 11, 2021 - 10:45 am

Hi again, in the meantime I have found, that may favorite Krusader enables it as well. But instead of simple Copy menu you have to use, unlike in Total Commander in Windows, Synchronize Directories (or so, I use the Czech localization).

Reply
fanatyk wędkarstwa November 19, 2021 - 7:43 pm

im a beginner can some tell me what does “-r” mean ?

Reply
Lionn Man February 28, 2022 - 12:46 pm

This -r is recursive

Reply
Hamed June 26, 2022 - 12:14 pm

Thanks so much

Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.