Creating And Removing Directory Structures On Linux | Network World| ItSoftNews

hand reaching out to folders and files

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.

Leave a Reply

Your email address will not be published. Required fields are marked *