How to create, copy, move, and remove files and directories in Linux
Command line file management
To manage files, you need to be able to create, remove, copy, and move them. You also need to organize them logically into directories, which you also need to be able to create, remove, copy, and move. The following table summarizes some of the most common file management commands. The remainder of this section will discuss ways to use these commands in more detail.
ACTIVITY | COMMAND SYNTAX |
---|---|
Create a directory | mkdir directory |
Copy a file | cp file new-file |
Copy a directory and its contents | cp -r directory new-directory |
Move or rename a file or directory | mv file new-file |
Remove a file | rm file |
Remove a directory containing files | rm -r directory |
Remove an empty directory | rmdir directory |
Creating Directories
The mkdir command creates one or more directories or subdirectories. It takes as arguments a list of paths to the directories you want to create. The mkdir command will fail with an error if the directory already exists, or if you are trying to create a subdirectory in a directory that does not exist. The -p (parent) option creates missing parent directories for the requested destination. Use the mkdir -p command with caution, because spelling mistakes can create unintended directories without generating error messages.
In the following example, pretend that you are trying to create a directory in the Videos directory named Watched, but you accidentally left off the letter “s” in Videos in your mkdir command.
[[email protected] ~]$ mkdir Video/Watched
mkdir: cannot create directory `Video/Watched': No such file or directory
The mkdir command failed because Videos was misspelled and the directory Video does not exist. If you had used the mkdir command with the -p option, the directory Video would be created, which was not what you had intended, and the subdirectory Watched would be created in that incorrect directory.
After correctly spelling the Videos parent directory, creating the Watched subdirectory will succeed.
[[email protected] ~]$ mkdir Videos/Watched
[[email protected] ~]$ ls -R Videos
Videos/:
blockbuster1.ogg blockbuster2.ogg Watched
Videos/Watched:
In the following example, files and directories are organized beneath the /home/user/ Documents directory. Use the mkdir command and a space-delimited list of the directory names to create multiple directories.
[[email protected] ~]$ cd Documents
[[email protected] Documents]$ mkdir ProjectX ProjectY
[[email protected] Documents]$ ls
ProjectX ProjectY
Use the mkdir -p command and space-delimited relative paths for each of the subdirectory names to create multiple parent directories with subdirectories.
[[email protected] Documents]$ mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3
[[email protected] Documents]$ cd
[[email protected] ~]$ ls -R Videos Documents
Documents:
ProjectX ProjectY Thesis
Documents/ProjectX:
Documents/ProjectY:
Documents/Thesis:
Chapter1 Chapter2 Chapter3
Documents/Thesis/Chapter1:
Documents/Thesis/Chapter2:
Documents/Thesis/Chapter3:
Videos:
blockbuster1.ogg blockbuster2.ogg Watched
Videos/Watched:
The last mkdir command created three ChapterN subdirectories with one command. The -p option created the missing parent directory Thesis.
Copying Files
The cp command copies a file, creating a new file either in the current directory or in a specified directory. It can also copy multiple files to a directory.
WARNING: If the destination file already exists, the cp command overwrites the file.
[[email protected] ~]$ cd Videos/
[[email protected] Videos]$ cp blockbuster1.ogg blockbuster3.ogg
[[email protected] Videos]$ ls -l
total 0
-rw-rw-r--. 1 user user 0 Oct 3 04:47 blockbuster1.ogg
-rw-rw-r--. 1 user user 0 Oct 3 04:47 blockbuster2.ogg
-rw-rw-r--. 1 user user 0 Oct 3 04:47 blockbuster3.ogg
[[email protected] Videos]$
When copying multiple files with one command, the last argument must be a directory. Copied files retain their original names in the new directory. If a file with the same name exists in the target directory, the existing file is overwritten. By default, the cp does not copy directories; it ignores them. In the following example, two directories are listed, Thesis and ProjectX. Only the last argument, ProjectX is valid as a destination. The Thesis directory is ignored.
[[email protected] Videos]$ cd ../Documents
[[email protected] Documents]$ cp thesis_chapter1.odf thesis_chapter2.odf Thesis ProjectX
cp: omitting directory `Thesis'
[[email protected] Documents]$ ls Thesis ProjectX
ProjectX:
thesis_chapter1.odf thesis_chapter2.odf
Thesis:
Chapter1 Chapter2 Chapter3
In the first cp command, the Thesis directory failed to copy, but the thesis_chapter1.odf and thesis_chapter2.odf files succeeded. If you want to copy a file to the current working directory, you can use the special . directory:
[[email protected] ~]$ cp /etc/hostname .
[[email protected] ~]$ cat hostname
host.example.com
Use the copy command with the -r (recursive) option, to copy the Thesis directory and its contents to the ProjectX directory.
[[email protected] Documents]$ cp -r Thesis ProjectX
[[email protected] Documents]$ ls -R ProjectX
ProjectX:
Thesis thesis_chapter1.odf thesis_chapter2.odf
ProjectX/Thesis:
Chapter1 Chapter2 Chapter3
ProjectX/Thesis/Chapter1:
ProjectX/Thesis/Chapter2:
thesis_chapter2.odf
ProjectX/Thesis/Chapter3:
Moving Files
The mv command moves files from one location to another. If you think of the absolute path to a file as its full name, moving a file is effectively the same as renaming a file. File contents remain unchanged. Use the mv command to rename a file.
[[email protected] Videos]$ cd ../Documents
[[email protected] Documents]$ ls -l thesis*
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter1.odf
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter2.odf
[[email protected] Documents]$ mv thesis_chapter2.odf thesis_chapter2_reviewed.odf
[[email protected] Documents]$ ls -l thesis*
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter1.odf
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter2_reviewed.odf
Use the mv command to move a file to a different directory.
[[email protected] Documents]$ ls Thesis/Chapter1
[[email protected] Documents]$
[[email protected] Documents]$ mv thesis_chapter1.odf Thesis/Chapter1
[[email protected] Documents]$ ls Thesis/Chapter1
thesis_chapter1.odf
[[email protected] Documents]$ ls -l thesis*
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter2_reviewed.odf
Removing Files and Directories
The rm command removes files. By default, rm will not remove directories that contain files, unless you add the -r or –recursive option.
It is a good idea to verify your current working directory before removing a file or directory.
[[email protected] Documents]$ pwd
/home/geek/Documents
Use the rm command to remove a single file from your working directory.
[[email protected] Documents]$ ls -l thesis*
-rw-rw-r--. 1 user user 0 Feb 6 21:16 thesis_chapter2_reviewed.odf
[[email protected] Documents]$ rm thesis_chapter2_reviewed.odf
[[email protected] Documents]$ ls -l thesis*
ls: cannot access 'thesis*': No such file or directory
If you attempt to use the rm command to remove a directory without using the -r option, the command will fail.
[[email protected] Documents]$ rm Thesis/Chapter1
rm: cannot remove `Thesis/Chapter1': Is a directory
Use the rm -r command to remove a subdirectory and its contents.
[[email protected] Documents]$ ls -R Thesis
Thesis/:
Chapter1 Chapter2 Chapter3
Thesis/Chapter1:
thesis_chapter1.odf
Thesis/Chapter2:
thesis_chapter2.odf
Thesis/Chapter3:
[[email protected] Documents]$ rm -r Thesis/Chapter1
[[email protected] Documents]$ ls -l Thesis
total 8
drwxrwxr-x. 2 user user 4096 Feb 11 12:47 Chapter2
drwxrwxr-x. 2 user user 4096 Feb 11 12:48 Chapter3
The rm -r command traverses each subdirectory first, individually removing their files before removing each directory. You can use the rm -ri command to interactively prompt for confirmation before deleting. This is essentially the opposite of using the -f option, which forces the removal without prompting the user for confirmation.
[[email protected] Documents]$ rm -ri Thesis
rm: descend into directory `Thesis'? y
rm: descend into directory `Thesis/Chapter2'? y
rm: remove regular empty file `Thesis/Chapter2/thesis_chapter2.odf'? y
rm: remove directory `Thesis/Chapter2'? y
rm: remove directory `Thesis/Chapter3'? y
rm: remove directory `Thesis'? y
WARNING: If you specify both the -i and -f options, the -f option takes priority and you will not be prompted for confirmation before rm deletes files.
In the following example, the rmdir command only removes the directory that is empty. Just like the earlier example, you must use the rm -r command to remove a directory that contains content.
[[email protected] Documents]$ pwd
/home/geek/Documents
[[email protected] Documents]$ rmdir ProjectY
[[email protected] Documents]$ rmdir ProjectX
rmdir: failed to remove `ProjectX': Directory not empty
[[email protected] Documents]$ rm -r ProjectX
[[email protected] Documents]$ ls -lR
.:
total 0
[[email protected] Documents]$