- How to Copy Files and Directories in Linux
- Using the cp Command to Copy Files and Directories in Linux
- Additional Options
- How to Copy File to Another Directory in Linux
- Copy Multiple Files from One Directory to Another in Linux
- Copy Using rsync Command
- Other Options
- How to Transfer a File or Directory Using SCP Command in Linux
- Step 1: Connect to the remote server
- Step 2: Transfer the folder or directory
- Step 3: Verify the transfer
- Some Examples
- Commands Mentioned:
- Conclusion:
- Dimitri Nek
How to Copy Files and Directories in Linux
This guide will show you how to copy files and directories in Linux by executing commands from the command line. Furthermore, the commands listed below detail how to create system-wide backups or filter out and copy only specific files.
Note: These Linux commands can only be run from a terminal window. If your version of Linux boots to a desktop graphical interface, launch a terminal window by pressing CTRL-ALT-F2 or CTRL-ALT-T.
Using the cp Command to Copy Files and Directories in Linux
The cp command is the primary method for copying files and directories in Linux. Virtually all Linux distributions can use cp . The basic format of the command is:
cp [additional_option] source_file target_file
cp my_file.txt my_file2.txt
This Linux command creates a copy of the my_file.txt file and renames the new file to my_file2.txt.
By default, the cp command runs in the same directory you are working in. However, the same file cannot exist twice in the same directory. You’ll need to change the name of the target file to copy in the same location. Some users will add _old, some will add a number, and some will even change the three-letter extension (e.g., .bak instead of .txt).
You may not get a warning before Linux overwrites your file – be careful, or see below for the –i option.
Additional Options
Additional options can be used in combination with the cp command:
- –v verbose: shows the progress of multiple copied files
- –ppreserve: keeps the same attributes, like creation date and file permissions
- –f force: force the copy by deleting an existing file first
- –i interactive: prompts for confirmation, highly advised
- –Rrecursive: copies all files and subfolders in a directory
- –u update: copy only if source is newer than destination
Note: The -p (preserve) option forces the system to preserve the following source file attributes: modification time, access time, user ID (UID), group ID (GID), file flags, file mode, access control lists (ACLs), and extended attributes (EAs).
How to Copy File to Another Directory in Linux
To copy a file from the directory you’re working in to a different location, use the command:
cp my_file.txt /new_directory
You don’t need to rename the file unless there’s already one with the same name in the target directory.
To specify a path for the source file:
cp /etc/my_file.txt /new_directory
This lets you copy without having to change directories. The cp command will create the /new_directory if it doesn’t exist.
To rename and copy a file to a different path:
cp my_file.txt /new_directory/my_file2.txt
This option is useful for creating backups of configuration files, or for copying data to a storage device.
Note: Learn how to move directories in Linux.
Copy Multiple Files from One Directory to Another in Linux
You may need to copy more than one file at a time.
List each file to be copied before the target directory:
cp my_file.txt my_file2.txt my_file3.txt /new_directory
This example created a copy of all three files in the /new_directory folder.
Use a wildcard to specify all files that share a string of characters:
cp /pictures/*.jpg /new_directory
This would find all the files with the .jpg extension in the /pictures directory, and copy them into the /new_directory folder.
To copy an entire folder and its subfolders and files, use the –R option:
cp –R /documents /new_directory
–R stands for recursive, which means “everything in that location.” This would copy all the files, as well as all the directories, to the /new_directory folder.
Copy Using rsync Command
The rsync command in Linux is used to synchronize or transfer data between two locations. Usage is similar to cp , but there are a few key differences to note.
To copy a single file, enter the following into a terminal:
rsync –a my_file.txt /new_directory/my_file_backup.txt
- The –a option means all, and is included with rsync commands – this preserves subdirectories, symbolic links, and other metadata.
- Replace the my_file.txt file in the working directory.
- Replace /new_directory/ with the destination.
- Using my_file_backup.txt as the target indicates the file will be renamed during the copy.
To copy a directory with rsync, enter the following:
rsync –a /etc/docker/ /home/backup/docker/
This copies the contents of the /etc/docker/ directory to /home/backup/docker/. Make sure to keep the slashes. Omitting the slash on the source directory will copy the contents into a subdirectory.
To omit files from being copied, check out our guide on how to exclude files and directories in data transfer using rsync command.
Other Options
The ls command is a handy partner to the cp command in Linux.
To list the contents of a directory enter the command:
The example above displays all the files in /directory. Use this command after copying to verify the files were copied successfully.
To change directories, use cd and the name of the directory. For example:
The command prompt will change to display that you’ve changed directories.
Now you understand how to copy files in Linux. The cp command is a versatile and powerful tool for managing and backing up files.
How to Transfer a File or Directory Using SCP Command in Linux
Secure Copy (SCP) is a command-line tool used to transfer files and directories securely between two Linux systems. SCP uses the Secure Shell (SSH) protocol to encrypt data during transmission. In this guide, we will show you how to transfer a folder or directory using the SCP command in Linux.
Step 1: Connect to the remote server
The first step is to connect to the remote server using SSH. You can do this by running the following command in the terminal:
ssh username@remote_host_ip_address
Replace “username” with your username on the remote server and “remote_host_ip_address” with the IP address of the remote server.
Step 2: Transfer the folder or directory
To transfer a folder or directory using SCP, you need to use the “-r” option, which recursively copies the entire directory tree. The basic syntax of the SCP command for transferring a folder is as follows:
scp -r /path/to/local/folder username@remote_host:/path/to/remote/folder
Replace “/path/to/local/folder” with the path to the folder you want to transfer from your local machine, “username” with your username on the remote server, “remote_host” with the hostname or IP address of the remote server, and “/path/to/remote/folder” with the path to the folder on the remote server where you want to transfer the folder.
For example, to transfer a folder named “myfolder” located in the home directory of the local machine to the remote server in the home directory of the user “user1”, you can run the following command:
scp -r ~/myfolder user1@remote_host:~/
This will transfer the “myfolder” directory and all its contents to the home directory of the user “user1” on the remote server.
Step 3: Verify the transfer
After the transfer is complete, you can verify that the folder was transferred correctly by logging in to the remote server and navigating to the directory where you transferred the folder.
Some Examples
The definition for every syntax that I will use:
- local server1 (currently ssh) = The server1 ip (192.168.2.2) that i ssh from my notebook.
- remote server2 = The server2 ip (192.168.2.5)
- another remote server3 = The server3 ip (192.168.2.6)
There are three ways to use the scp command which are :
- To copy from local server1 (current ssh) to a remote server2. (server1–>server2)
- To copy from a remote server2 to local server1 (currently ssh). ( server2 –> server1)
- To copy from a remote server2 to another remote server3. ( server2–>server3)
In the third case, the directory is transferred directly between the servers; your local server1 ( currently ssh) will only tell the servers what to transfer. Let’s have a look at the syntax of this command:
1. To copy directory from local server1 (currently ssh) to a (remote) server2.
server1 : 192.168.2.2
server2 : 192.168.2.5
[root@server1 ~]# scp -r /tmp/scpdirdemo root@192.168.2.5:/tmp root@192.168.2.5's password: webmin-1.530-1.noarch.rpm 100% 15MB 350.1KB/s 00:45 VMwareTools-8.3.2-257589.tar.gz 100% 46MB 362.3KB/s 02:10 [root@server1 ~]#
2. To copy directory from a remote server2 to local server1 (currently ssh)
server1 : 192.168.2.2
server2 : 192.168.2.5
[root@server1 ~]# scp -r root@192.168.2.5:/tmp/scpdirdemo /tmp root@192.168.2.5's password: VMwareTools-8.3.2-257589.tar.gz 100% 46MB 3.8MB/s 00:12 webmin-1.530-1.noarch.rpm 100% 15MB 1.7MB/s 00:09 [root@server1 ~]#
3. To copy directory from a remote server2 to another remote server3.
server1 : 192.168.2.2
server2 : 192.168.2.5
server3 : 192.168.2.6
[root@server1 ~]# scp -r root@192.168.2.5:/tmp/scpdirdemo root@192.168.2.6:/tmp root@192.168.2.5's password: root@192.168.2.6's password: VMwareTools-8.3.2-257589.tar.gz 100% 46MB 11.5MB/s 00:04 webmin-1.530-1.noarch.rpm 100% 15MB 7.7MB/s 00:02 Connection to 192.168.2.5 closed.
[root@server2 ~]# ls /tmp/scpdirdemo VMwareTools-8.3.2-257589.tar.gz webmin-1.530-1.noarch.rpm [root@server2 ~]#
Commands Mentioned:
- ssh – connects to a remote server using SSH
- scp – transfers files and directories securely using SCP
Conclusion:
In this guide, we have shown you how to transfer a folder or directory using the SCP command in Linux. By using SCP, you can securely transfer files and directories between two Linux systems over the network. Remember to use the “-r” option to transfer a folder and verify the transfer after it is complete.
Dimitri Nek
Dimitri is a Linux-wielding geek from Newport Beach and a server optimization guru with over 20 years of experience taming web hosting beasts. Equipped with an arsenal of programming languages and an insatiable thirst for knowledge, Dimitri conquers website challenges and scales hosting mountains with unmatched expertise. His vast knowledge of industry-leading hosting providers allows him to make well-informed recommendations tailored to each client’s unique needs.