- Buy Microsoft Visio Professional or Microsoft Project Professional 2024 for just $80
- Get Microsoft Office Pro and Windows 11 Pro for 87% off with this bundle
- Buy or gift a Babbel subscription for 78% off to learn a new language - new low price
- Join BJ's Wholesale Club for just $20 right now to save on holiday shopping
- This $28 'magic arm' makes taking pictures so much easier (and it's only $20 for Black Friday)
Creating and removing directory structures on Linux
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 <== new file └── 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.
Copyright © 2023 IDG Communications, Inc.