Copying, Moving and Renaming Files and Directories

By now, you've learned a little about the structure of the filesystem; and you've learned how to create files and directories.

But just because you know how to create files and directories doesn't mean that you're stuck with the changes you've made. What if you want to rename and/or move files and directories?

Let's start with the copy command.

Copying Files

Like so many Linux features, you have a variety of options from which to choose when you want to manipulate files and directories. You can also use wildcards when you're copying, moving, or deleting files and directories.

Basically, the copy command is not much more complex than typing:

cp <source> <destination>

so to copy the file sneakers.txt to the directory tigger in your login directory, just type:

cp sneakers.txt tigger

Notice that you also used relative pathnames to copy the file. You can use both relative and absolute pathnames with cp. Our login directory is the parent of the directory tigger; meaning that tigger is one directory down from ours.

Read the cp man page (man cp) for a full list of the options available with cp. But among the options you can use with cp are:

Just by using cp alone, you won't see much when the command is executed. Using an option, such as -i, can make the process a little more useful, because if you want to copy a file to a location that already has a file with the same name, you'll be asked first if you really want to overwrite -- meaning replace -- the file that's already there.

Tip: Remember that among your options is -f (force), which can overwrite files without asking you if you're certain. Make sure, when you use the force option, that you really want to overwrite a file.

Now that we have the file sneakers.txt in the tigger directory, let's use cp -i to copy the file again to the same location.

[billy@localhost billy]$ cp -i sneakers.txt tigger
cp: overwrite 'tigger/sneakers.txt'?

To overwrite the file that's already there, press Y and then Enter. Don't want to overwrite the file? Now's the time to press N and Enter.

Moving Files

To move files, use the mv command (man mv), which is similar to the cp command, except that with mv the file is physically moved from one place to another, instead of being duplicated, as with cp.

Common options available with mv include:

If you want to move a file out of your home directory and into another directory, you would type:

mv sneakers.txt tigger

or, mv sneakers.txt /home/billy /home/billy/tigger using absolute pathnames.

Renaming Files

Actually, we've already covered half of renaming, because when you copy or move files, you can also rename.

To copy the file sneakers.txt from our login directory to our tigger subdirectory, just type:

cp sneakers.txt tigger

To copy and rename that file from sneakers.txt to piglet.txt, type:

cp sneakers.txt tigger/piglet.txt

To move and rename the file, just substitute mv for cp in the above example.

If you cd to tigger and use ls, you'll see the file piglet.txt.

If you just want to rename the file and keep its location, just mv in your current directory:

mv  sneakers.txt piglet.txt

Deleting Files and Directories

We talked about creating files with the touch command and by using redirection in Chapter 3. And we created the directory tigger using mkdir.

But we haven't discussed how to delete files and directories.

Deleting files and directories with the rm command (man rm) is a straightforward process.

Let's take our new file piglet.txt, and delete it from the tigger directory with the rm command:

rm piglet.txt

What happens if we didn't really want to get rid of it? Too late! Again, that's where the -i (interactive) option comes in handy, because it gives a second chance to think about whether we really want to toss the file.

[billy@localhost billy]$ rm -i piglet.txt
rm: remove 'piglet.txt'?

You can also delete files using the wildcard *, but be careful, because you can easily delete files you didn't intend to throw away.

To remove a file using a wildcard, you would type:

rm pig*

You can also remove more than one file in one command, as in:

rm piglet.txt sneakers.txt

Options for removing files -- and directories -- include:

To remove directories with rm, you must specify the -r option.

For example, if you want to recursively remove the directory tigger you would type:

rm -r tigger

And if you want to combine options, such as forcing a recursive deletion, you can type:

rm -rf tigger


Be careful! rm is a powerful command, and can delete your entire system! If you're root and you type the simple command rm -rf / you're sunk -- like a snake eating its tail, the command will recursively remove everything on your system.

A safer alternative to using rm for removing directories is the rmdir command. With this command, you won't be allowed to use recursive deletions, so a directory which has files in it won't be deleted.

Read the rmdir man page by typing man rmdir to find out more about the command.