image

How To Copy a File in Linux Using the CP Command

Copying files is one of the fundamental tasks you’ll perform when managing files in Linux. The cp command is a powerful tool that allows you to copy files and directories from one location to another. In this guide, we'll explore how to use the cp command effectively.

Basic Syntax of the CP Command

The basic syntax of the cp command is as follows:

cp [options] source destination

  • source: The file or directory you want to copy.
  • destination: The location where you want to copy the file or directory.

Copying a Single File

To copy a single file, you can use the cp command without any options. For example, to copy a file named file1.txt to a new file named file2.txt in the same directory, you would use:

cp file1.txt file2.txt

Example

cp /home/user/file1.txt /home/user/documents/file1.txt

This command copies file1.txt from the user's home directory to the documents directory.

Copying Multiple Files

You can copy multiple files at once by specifying multiple sources and a single destination directory. For example:

cp file1.txt file2.txt /home/user/documents/

This command copies file1.txt and file2.txt to the documents directory.

Copying Directories

To copy directories, you need to use the -r (or --recursive) option to copy all the contents of the directory recursively. For example:

cp -r /home/user/myfolder /home/user/backup/

This command copies the entire myfolder directory and its contents to the backup directory.

Commonly Used Options

  • -r or --recursive: Recursively copy directories and their contents.
  • -i or --interactive: Prompt before overwriting files.
  • -v or --verbose: Display detailed information of the copy process.
  • -u or --update: Copy only when the source file is newer than the destination file or when the destination file is missing.
  • -p or --preserve: Preserve file attributes such as mode, ownership, and timestamps.

Example with Options

cp -rv /home/user/myfolder /home/user/backup/

This command recursively copies myfolder to the backup directory and provides verbose output.

Practical Tips

Preserve File Attributes

To preserve the original file attributes (such as modification times, access times, and modes), use the -p option:

cp -p file1.txt /home/user/backup/

Overwrite Confirmation

To get a prompt before overwriting an existing file, use the -i option:

cp -i file1.txt /home/user/backup/

Verbose Output

For a detailed output of the copying process, use the -v option:

cp -v file1.txt /home/user/backup/

Updating Files

To copy only when the source file is newer than the destination file, or when the destination file is missing, use the -u option:

cp -u file1.txt /home/user/backup/

Copying Hidden Files

Hidden files (those starting with a dot, such as .hiddenfile) are not copied by default with the cp command. To include hidden files, you can use a wildcard:

cp -r /home/user/myfolder/.[!.]* /home/user/backup/

Handling Spaces in Filenames

If the source or destination filenames contain spaces, enclose them in quotes:

cp "file name with spaces.txt" "/home/user/backup/file name with spaces.txt"

Automating File Copy

You can automate file copying with a bash script. Create a script named copy_files.sh:

#!/bin/bash

SOURCE="/home/user/sourcefile.txt"

DEST="/home/user/backup/sourcefile.txt"

cp -v $SOURCE $DEST

if [ $? -eq 0 ]; then

    echo "File copied successfully."

else

    echo "Failed to copy file."

fi

Make the script executable and run it:

chmod +x copy_files.sh

./copy_files.sh

FAQs

Q1: How do I copy a file to a remote server? 

You can use scp (secure copy) for copying files to a remote server:

scp /home/user/file1.txt user@remote_server:/home/user/

Q2: Can I copy a file and rename it at the same time? 

Yes, you can specify a new name for the destination file:

cp /home/user/file1.txt /home/user/documents/file2.txt

Q3: How do I copy only new or modified files? 

Use the -u option to copy only when the source file is newer than the destination file or when the destination file is missing:

cp -u /home/user/file1.txt /home/user/backup/

Q4: How do I copy files with special characters in their names? 

Enclose the filenames with special characters in quotes:

cp "file name with spaces.txt" "/home/user/backup/file name with spaces.txt"

Q5: How can I copy a directory but exclude certain files? 

Use rsync with the --exclude option to exclude specific files or directories:

rsync -av --exclude 'pattern_to_exclude' /home/user/myfolder /home/user/backup/

Ready to level up your coding skills and create awesome apps and websites for Nepal and beyond? Enroll in Learnsic's online courses and learn from experienced instructors who will guide you on your path to becoming a coding ninja!

  • Learn Web Development: Master the Django web framework and build dynamic websites: Django Certification
  • Flutter App Development: Craft beautiful cross-platform mobile apps with Flutter: Flutter App Development
  • Python Programming for Beginners: Start your coding journey with the versatile Python language: Python

With the power of coding in your toolkit (and a little help from Learnsic), you'll be well on your way to becoming a coding master!

Share On