Working with Directories

There is another batch of commands suited to working with directory files (directories being just another type of file).


Print Working Directory


Change to a new Directory


MaKe or create a new DIRectory


MoVe directories or, like files, rename them


ReMove or delete DIRectories

One way to create a complicated directory structure is to use the mkdir command to create each and every directory.

mkdir /dir1
mkdir /dir1/sub_dir
mkdir /dir1/sub_dir/yetanotherdir

What you could do instead is save yourself a few keystrokes and use the -p flag. This tells mkdir to create any parent directories that might not already exist. If you happen to like a lot of verbiage from your system, you could also add the ?verbose flag for good measure.

mkdir ?p /dir/sub_dir/yetanotherdir

To rename or move a directory, the format is the same as you used with a file or group of files. Use the mv command.

mv path_to_dir new_path_to_dir

Removing a directory can be just a bit more challenging. The command rmdir seems simple enough. In fact, removing this directory was no problem:

$ rmdir trivia_dir

Removing this one, however, gave me this error:

$ rmdir junk_dir
rmdir: junk_dir: Directory not empty

You can use rmdir only to remove an empty directory. There is a -p option (as in parents) that enables you to remove a directory structure. For instance, you could remove a couple of levels like this:

$ rmdir ?p junk_dir/level1/level2/level3


Beware the of rm -rf * command. Better yet, never use it. If you must delete an entire directory structure, change directory to the one above it and explicitly remove the directory. This is also the first and best reason to do as much of your work as possible as a normal user and not root. Because root is all-powerful, it is quite capable of completely destroying your system. Imagine that you are in the top-level directory (/) instead of /home/myname/junkdir when you initiate that recursive delete. It is far too easy to make this kind of mistake. Beware.

All the directories from junk_dir on down will be removed, but only if they are empty of files. A better approach is to use the rm command with the -r, or recursive, option. Unless you are deleting only a couple of files or directories, you will want to use the -f option, as well.

$ rm ?rf junk_dir