A few clever Linux commands can make it a lot easier to create, view and remove complex directory structures. Credit: Thinkstock Managing directories on Linux is easy, but the process gets more complex when you need to create, empty or remove large, complex directory structures. This post will take you from the most basic commands to some fairly complex ones that can help make the process easier. mkdir The mkdir command can create a single directory like this: $ mkdir newdir It can also create a complex directory and subdirectory structure with a command like the one below. The -p argument tells the command to create the base directory if it doesn’t already exist. Each group of directory names that appears in the command shown – like {1,2,3} and {docs,script} – will result in a series of subdirectories being created at that level. $ mkdir -p newdir/{1,2,3}/{docs,scripts} You can add as many levels to the directory structure as you need simply by adding additional /{dir1,dir2} type specifications to the mkdir command. If you add the -v (verbose) option, the command will display each directory as it is created. $ mkdir -pv newdir/{1,2,3}/{docs,scripts} mkdir: created directory 'newdir' mkdir: created directory 'newdir/1' mkdir: created directory 'newdir/1/docs' mkdir: created directory 'newdir/1/scripts' mkdir: created directory 'newdir/2' mkdir: created directory 'newdir/2/docs' mkdir: created directory 'newdir/2/scripts' mkdir: created directory 'newdir/3' mkdir: created directory 'newdir/3/docs' mkdir: created directory 'newdir/3/scripts' You can view the directory structure after it is set up using a recursive ls command like this that displays the directories at each level: $ ls -lR newdir newdir: total 12 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 1 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 2 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 3 newdir/1: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/1/docs: total 0 newdir/1/scripts: total 0 newdir/2: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/2/docs: total 0 newdir/2/scripts: total 0 newdir/3: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/3/docs: total 0 newdir/3/scripts: total 0 tree Another and potentially more gratifying way to view a newly created directory structure is to use the tree command that displays the structure of a complex directory in a very easy to understand way like this: $ tree newdir newdir ├── 1 │ ├── docs │ └── scripts ├── 2 │ ├── docs │ └── scripts └── 3 ├── docs └── scripts 9 directories, 0 files Once you add files to your new directories, the tree command will show those as well. $ tree newdir/1 newdir/1 ├── docs │ └── notes └── scripts 2 directories, 1 file touch The touch command can be used to create a new file or to update the timestamp on an existing file. To add an empty file to the newdir/2/docs directory, you could use a command like this: $ touch newdir/2/docs/notes Using /dev/null To empty a file, you can redirect /dev/null to it using a command like that shown below. In the sequence of commands, we list the current file, empty it using /dev/null and then list it again to verify that it has been emptied. $ ls -l newdir/1/docs/notes -rw-r--r--. 1 shs shs 139 Dec 29 11:42 newdir/1/docs/notes $ cat /dev/null > newdir/1/docs/notes $ ls -l newdir/1/docs/notes -rw-r--r--. 1 shs shs 0 Dec 29 11:43 newdir/1/docs/notes find You can use the find command to recursively locate and display files or directories. In the command below, we use find to display the files in the newdir directory structure. Adding -ls provides long listings with file details. $ find newdir -type f newdir/2/docs/notes newdir/1/docs/notes $ find newdir -type f -ls 5782884 0 -rw-r--r-- 1 shs shs 0 Dec 29 11:46 newdir/2/docs/notes 5782883 0 -rw-r--r-- 1 shs shs 0 Dec 29 11:43 newdir/1/docs/notes Moving into a directory and back again If you use the cd command to move into a directory anywhere in your new directory structure, you can get back to the directory from which you typed the cd command using the cd – command as shown here: $ pwd /home/shs/newdir $ cd 1/docs $ ls -l total 0 -rw-r--r--. 1 shs shs 0 Dec 29 11:43 notes $ cd - /home/shs/newdir The cd – command always takes you back to where you were located in the file system before you typed the prior cd command. Removing a complex directory structure To remove a complex directory structure, assuming you have proper permissions to do so, simply use a recursive rm command like that shown below. $ rm -rf newdir $ ls -ld newdir ls: cannot access 'newdir': No such file or directory The directory and all of its contents will be removed. Using scripts Creating a complex directory structure, making changes and eventually removing it can be easy if you use the right commands. If you need to create or replace a specific structure frequently, doing that with a script can save you a lot of trouble. Here’s an example script that will create a specific structure or replace it as needed. #!/bin/bash if [ $# == 0 ] then echo -n "dirname> " read dirname else dirname=$1 fi if [ ! -d $dirname ]; then mkdir -p $dirname/{users,files,notes} tree $dirname else echo "$dirname exists. Remove it first? [y,n]" read ans if [ $ans == 'y' ] then rm -rf $dirname mkdir -p $dirname/{users,files,notes} tree $dirname else echo ok -- $dirname left as is fi fi Wrap-up Creating and removing complex directory structures can be a lot easier with a few well-crafted commands or a clever script. Related content how-to Compressing files using the zip command on Linux The zip command lets you compress files to preserve them or back them up, and you can require a password to extract the contents of a zip file. By Sandra Henry-Stocker May 13, 2024 4 mins Linux opinion NSA, FBI warn of email spoofing threat Email spoofing is acknowledged by experts as a very credible threat. By Sandra Henry-Stocker May 13, 2024 3 mins Linux how-to The logic of && and || on Linux These AND and OR equivalents can be used in scripts to determine next actions. By Sandra Henry-Stocker May 02, 2024 4 mins Linux how-to Using the apropos command on Linux By Sandra Henry-Stocker Apr 24, 2024 3 mins Linux PODCASTS VIDEOS RESOURCES EVENTS NEWSLETTERS Newsletter Promo Module Test Description for newsletter promo module. Please enter a valid email address Subscribe