How to copy a directory in Linux a Guide for beginners 2020

I know how to copy files in Linux by using cp command, but on same when I tried to copy Documents directory, and I got the following error “cp: -r not specified; omitting directory ‘Documents'”

Are you facing the same problem?

Are you a new user of Linux and don’t know how to copy a directory in Linux? Don’t worry anymore. In this article, I cover how to copy the directory in Linux with all possibilities.

So you will not face any problem in future to copy directory in Linux

Article Content

Pre-requisites to Copy a Directory in Linux

Before you start copy a directory in Linux you must know two thing

  • You have read permission of source directory
  • And You have write permission of destination directory

If you don’t have write permission on the destination you will get “Permission denied” error. As following.

[email protected]:~$cp -r Documents /var/backups/
cp: cannot create directory '/var/backups/Documents': Permission denied
[email protected]:~$

Copy Directory from source to destination

cp command is used to copy files from one location to another. The basic syntax of the command is.

cp [Option] [Source] [Destination]

You have used already cp command to copy, rename files.

You can use cp command followed by -r option, source, and destination. You can use the complete path or relative path. As see example follow. Full path /home/vijay/backups and a relative path is backups only.

[email protected]:~$cp -r Documents /home/vijay/backups
[email protected]:~$cp -r Documents backups
[email protected]:~$

Copy and Rename Directory in Linux

Basically, copy means creating a new directory with consist of old directory. but sometimes I need to copy a directory and rename it. Read How to rename a file in Linux

Simple way copy directory and rename it. but another copy directory with a new name. You can give destination location with the new directory name.

$cp -r /source_directory_path /Destination path/New_name_for_directory

[email protected]:~$cp -r Documents/ Documents_backup
[email protected]:~$

Copy Directory with Subdirectories and Files

-r option is enough to copy a directory with its sub-directories and files. It’s default mode, So you don’t need to change anything.

[email protected]:~$cp -r Python-3.7.3 Python-3.7.3_back
[email protected]:~$

Copy Directory with Verbose Option

if you want to copy a directory verbosely then use cp command followed by -v option. In this case, don’t forget to use -r option. The complete command will be as shown following.

[email protected]:~$cp -rv Python-3.7.3 Python-3.7.3-verbose
'Python-3.7.3' -> 'Python-3.7.3-verbose'
'Python-3.7.3/config.status' -> 'Python-3.7.3-verbose/config.status'
'Python-3.7.3/config.log' -> 'Python-3.7.3-verbose/config.log'
'Python-3.7.3/Doc' -> 'Python-3.7.3-verbose/Doc'
'Python-3.7.3/Doc/c-api' -> 'Python-3.7.3-verbose/Doc/c-api'

Copy Directory and Preserve content Attributes.

When you copy the directory in Linux using -r option. Attributes of the directory’s content will be changed. Attributes are followings:

  • Modification time/date
  • Access time
  • File flags
  • File mode
  • User ID (UID)
  • Group ID (GID)
  • Access Control Lists (ACLs)
  • Extended Attributes (EAs)

I have copied directory Python-3.7.3 to Python-3.7.3_back And I saw file and folder attribution of modifying date has been changed.

You can see in the following examples:

[email protected]:~$ls -l Python-3.7.3
-rw-r--r--  1 root  root      3105 Jun 19 10:59 python-config
-rw-r--r--  1 root  root      2042 Jun 19 10:59
-rw-r--r--  1 root  root     65363 Jun 19 10:59
-rw-r--r--  1 vijay vijay    10113 Mar 26 01:51 README.rst
-rw-r--r--  1 vijay vijay   102108 Mar 26 01:51
[email protected]:~$
[email protected]:~$ls -l Python-3.7.3_back
-rw-r--r--  1 vijay vijay     3105 Jun 20 11:26 python-config
-rw-r--r--  1 vijay vijay     2042 Jun 20 11:26
-rw-r--r--  1 vijay vijay    65363 Jun 20 11:26
-rw-r--r--  1 vijay vijay    10113 Jun 20 11:26 README.rst
-rw-r--r--  1 vijay vijay   102108 Jun 20 11:26
[email protected]:~$

Now, I want to copy again with preservation of contents attribution. I studied the manual page and help option.

I found -p option is used for preserving attribution at the time of copy directory. I tested it I got success.

You can use cp command followed by -rp command to preserve attribution of contents at the time of taking backup or copying directory.

See the example below:

[email protected]:~$cp -rp Python-3.7.3 Python-3.7.3-new
[email protected]:~$

Verification of cp -rp command:

[email protected]:~$ls -l Python-3.7.3-new
-rw-r--r--  1 root  root      3105 Jun 19 10:59 python-config
-rw-r--r--  1 root  root      2042 Jun 19 10:59
-rw-r--r--  1 root  root     65363 Jun 19 10:59
-rw-r--r--  1 vijay vijay    10113 Mar 26 01:51 README.rst
-rw-r--r--  1 vijay vijay   102108 Mar 26 01:51
[email protected]:~$

Copy directory in Linux using rsync command

rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details.

rsync is a file transfer program capable of an efficient remote update via a fast differencing algorithm.

[email protected]:~$rsync -a /var/www/public_html/ /var/www/public_html_backup/
[email protected]:~$

Warning: the source directory must end with trailing slash /. If you don’t do same, rsync will copy the source directory inside the destination directory. If you add a trailing slash end of the source directory it will copy only the contents of source directory to the destination directory.


You have learned lots of option to copy a directory in Linux by using the command line. You can use a graphic interface but I didn’t describe. If you want to read more about cp command read the official documentation here

If you have any question related to this article write in the comment box.


If Appreciate My Work, You should consider:

Leave a Comment