Linux fundamentals: How to copy, move, and rename files and directories
Copying, moving, and renaming files and directories are standard tasks for sysadmins and end users. Depending on your Linux distribution, you can accomplish these operations in various ways.
The Bash shell is usually the most efficient tool for file management. This article assumes you already have a basic understanding of how to open a Linux terminal and enter commands. (See How to access the Linux terminal if you want a refresher.) Connect to your Linux terminal with your regular user account, and get ready to reorganize.
Change to your home directory and create a new directory named mydir
for the exercises. The command to create a new directory is mkdir
:
$ mkdir mydir
$ cd mydir/
Move files and directories
The mv
command moves both directories and files. Check its options and parameters from the --help
results below:
$ mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force do not prompt before overwriting
-i, --interactive prompt before overwrite
-n, --no-clobber do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-T, --no-target-directory treat DEST as a normal file
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-Z, --context set SELinux security context of destination
file to default type
--help display this help and exit
--version output version information and exit
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off never make backups (even if --backup is given)
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups
Rename files and directories
You also use the mv
command to rename directories and files if the destination doesn't already exist. If the destination exists, then they're moved using the syntax mv {source} {destination}
. Here is an example of moving existing files to existing directories:
$ ls -l
total 0
drwxrwxr-x. 2 localuser localuser 6 Jun 9 14:57 dir1
drwxrwxr-x. 2 localuser localuser 6 Jun 9 17:52 dir2
drwxrwxr-x. 2 localuser localuser 6 Jun 9 17:52 dir3
drwxrwxr-x. 3 localuser localuser 21 Jun 9 16:57 dir4
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:31 file1
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:33 file2
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:33 file3
$ mv file1 dir1/
$ mv file2 dir2/
$ mv file3 dir3/
$ ls -l
total 0
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir1
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir2
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir3
drwxrwxr-x. 3 localuser localuser 21 Jun 9 16:57 dir4
[mydir]$ ls -lR
.:
total 0
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir1
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir2
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:53 dir3
drwxrwxr-x. 3 localuser localuser 21 Jun 9 16:57 dir4
./dir1:
total 0
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:31 file1
./dir2:
total 0
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:33 file2
./dir3:
total 0
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:33 file3
./dir4:
total 0
drwxrwxr-x. 2 localuser localuser 19 Jun 9 17:35 subdir1
./dir4/subdir1:
total 0
-rw-rw-r--. 1 localuser localuser 0 Jun 9 17:35 file4
[ Boost your Bash skills. Download the Bash shell scripting cheat sheet. ]
And you can use the mv
command to move directories into other directories:
$ ls -1
dir1
dir2
dir3
dir4
$ mv dir1/ dir2/
$ mv dir2/ dir3/
$ ls -1
dir3
dir4
The dir1
and dir2
directories still exist; you've just moved them. See what it looks like for yourself:
$ ls -R
dir3
dir4
./dir3:
dir2
file3
./dir3/dir2:
dir1
file2
./dir3/dir2/dir1:
file1
./dir4:
subdir1
./dir4/subdir1:
file4
Copy files and directories
The cp
command copies both files and directories. This command has many options, but the basic syntax is simple. Run cp {source} {destination}
to copy from one place (source) to another (destination). Consider the following example:
$ ls -1
dir3
dir4
$ cp dir4/subdir1/file4 .
$ ls -1
dir3
dir4
file4
$ ls -R dir4/
dir4/:
subdir1
dir4/subdir1:
file4
[ Download the free Linux commands cheat sheet. ]
To copy an entire directory with its contents, use the -R
option, as seen below:
$ cp -R dir3/ dir4/
$ ls -R
dir3
dir4
file4
./dir3:
total 0
dir2
file3
./dir3/dir2:
dir1
file2
./dir3/dir2/dir1:
file1
./dir4:
dir3
subdir1
./dir4/dir3:
dir2
file3
./dir4/dir3/dir2:
file2
./dir4/dir3/dir2/dir1:
file1
./dir4/subdir1:
file4
When you copy empty directories into other directories, there's no need for the -R
parameter.
More to explore
For each command I've demonstrated, there are many more options I've left out for the sake of brevity.
As a sysadmin, you must know how to copy, move, and rename files and directories. These file-management commands are the basis of much of what you do on the system and are the building blocks for effective Linux administration. I hope this article aids you in understanding this topic, helps your Linux certification path, and adds to your general sysadmin knowledge.
Alexon Oliveira
Alexon has been working as a Senior Technical Account Manager at Red Hat since 2018, working in the Customer Success organization focusing on Infrastructure and Management, Integration and Automation, Cloud Computing, and Storage Solutions. More about me