Skip to main content

Command Palette

Search for a command to run...

How to Copy a Directory in Linux

Published
6 min readView as Markdown

Copying directories in Linux is a common task that you might need to do whether you're managing files, backing up data, or moving projects. If you’re new to Linux or just want to improve your command line skills, understanding how to copy directories efficiently is essential. In this article, I’ll guide you through the best methods to copy directories in Linux, using simple commands and options.

You’ll learn how to use the cp command, which is the most straightforward way, and also explore rsync, a powerful tool for copying directories with more control. By the end, you’ll feel confident handling directory copies in your Linux environment.

Understanding the Basics of Copying Directories in Linux

Copying files and directories in Linux is done primarily through command-line tools. Unlike copying a single file, copying a directory requires preserving its structure and contents, including subdirectories and files.

The most common command for copying is cp. However, copying directories requires additional options to ensure everything inside the directory is copied correctly.

Why Copy Directories?

  • Backing up important data.
  • Moving projects or files between locations.
  • Duplicating directory structures for testing or development.
  • Transferring files between servers or drives.

When you copy a directory, you want to keep the entire folder and its contents intact, including hidden files and permissions.

Using the cp Command to Copy Directories

The cp command is the simplest way to copy files and directories. To copy a directory, you need to use the -r or -R option, which stands for recursive copying. This tells cp to copy the directory and all its contents, including subdirectories.

Basic Syntax

cp -r source_directory destination_directory

Example

Suppose you have a directory named project and want to copy it to backup_project:

cp -r project backup_project

This command copies the entire project directory and its contents into a new directory called backup_project.

Important Options with cp

  • -r or -R: Recursively copy directories.
  • -v: Verbose mode, shows files being copied.
  • -p: Preserve file attributes like timestamps and permissions.
  • -a: Archive mode, which is equivalent to -dR --preserve=all. It preserves symbolic links, file permissions, timestamps, and copies recursively.

Using cp -a for Accurate Copies

If you want to make an exact copy of a directory, including all metadata, use:

cp -a source_directory destination_directory

This is especially useful when copying system files or directories where permissions and timestamps matter.

Copying Hidden Files

Hidden files in Linux start with a dot (.). The cp -r command copies hidden files inside the directory automatically. However, if you want to copy hidden files from the current directory to another directory, you need to specify them explicitly:

cp -r .hidden_directory destination_directory

Or to copy all hidden files in the current directory:

cp -r .* destination_directory

Be careful with this command as it may copy . and .. directories, which can cause errors.

Using rsync to Copy Directories in Linux

rsync is a versatile tool often used for syncing files and directories, but it’s also excellent for copying directories locally or remotely. It offers more control and options than cp.

Basic Syntax

rsync -av source_directory/ destination_directory/

Why Use rsync?

  • Efficient copying by transferring only changed files.
  • Preserves permissions, timestamps, symbolic links.
  • Can resume interrupted transfers.
  • Supports copying over SSH for remote directories.

Explanation of Options

  • -a: Archive mode, preserves permissions, timestamps, symbolic links, and copies recursively.
  • -v: Verbose output.
  • Trailing slashes on source and destination affect behavior:
    • With a trailing slash on the source (source_directory/), rsync copies the contents of the directory.
    • Without the trailing slash (source_directory), it copies the directory itself.

Example

Copy the entire project directory to backup_project:

rsync -av project/ backup_project/

This copies all files and subdirectories inside project into backup_project.

Copying Directories Remotely

You can also use rsync to copy directories between local and remote machines:

rsync -av /local/path user@remote_host:/remote/path

Or from remote to local:

rsync -av user@remote_host:/remote/path /local/path

This is handy for backups or transferring files securely over SSH.

Copying Directories with tar Command

Another method to copy directories is by creating an archive with tar and then extracting it. This is useful when you want to copy directories while compressing them or transferring them as a single file.

Steps to Copy Using tar

  1. Create a tar archive of the directory:
tar -cf project.tar project/
  1. Extract the archive to the destination:
tar -xf project.tar -C /path/to/destination/

Benefits of Using tar

  • Combines all files into one archive.
  • Can compress the archive to save space (tar -czf for gzip).
  • Useful for transferring directories over networks or saving backups.

Common Mistakes When Copying Directories

Copying directories might seem straightforward, but some common mistakes can cause issues:

  • Forgetting the -r or -a option with cp, resulting in errors or incomplete copies.
  • Not preserving file permissions, which can cause problems with executable files.
  • Using incorrect trailing slashes with rsync, leading to unexpected directory structures.
  • Copying hidden files incorrectly, missing important configuration files.
  • Overwriting existing files unintentionally without backup.

Tips for Efficient Directory Copying

  • Always double-check the source and destination paths before running commands.
  • Use -v (verbose) option to see what files are being copied.
  • Use rsync for large directories or when you want to resume interrupted copies.
  • Preserve file attributes with -a option to avoid permission issues.
  • Test commands on small directories before copying large or critical data.

Summary Table of Commands

Command ExampleDescription
cp -r source destCopy directory recursively
cp -a source destCopy directory with all attributes
rsync -av source/ dest/Copy directory contents with verbose output
rsync -av source destCopy directory including the directory itself
tar -cf archive.tar directory/Create tar archive of directory
tar -xf archive.tar -C /dest/Extract tar archive to destination

Conclusion

Copying directories in Linux is a fundamental skill that you’ll use often. Whether you choose the simple cp command or the more powerful rsync, knowing the right options ensures your copies are complete and accurate. For quick copies, cp -r works well, but for preserving metadata or syncing large directories, rsync is the better choice.

Remember to consider hidden files, permissions, and directory structure when copying. With these tools and tips, you can confidently manage your Linux directories and keep your files organized and safe.


FAQs

How do I copy a directory and its contents in Linux?

Use the cp command with the -r option: cp -r source_directory destination_directory. This copies the directory and all its files and subdirectories.

What is the difference between cp -r and cp -a?

cp -r copies directories recursively but may not preserve file attributes. cp -a copies recursively and preserves permissions, timestamps, and symbolic links.

Can I copy directories between two remote Linux servers?

Yes, using rsync over SSH: rsync -av user@server1:/path/to/dir user@server2:/path/to/destination.

How do I copy hidden files in a directory?

Hidden files are copied automatically with cp -r if they are inside the directory. To copy hidden files from the current directory, use cp -r .* destination_directory carefully.

Is rsync better than cp for copying directories?

rsync offers more features like resuming interrupted copies, syncing only changed files, and preserving metadata, making it better for large or repeated copies.

More from this blog

L

LinuxBloke | Linux Tips, Tricks & Troubleshooting

672 posts