How To Make A Directory In Linux

How To Make A Directory In Linux

Reading time1 min
#Linux#Scripting#Automation#mkdir#DirectoryCreation#LinuxCommands

Mastering Directory Creation in Linux: Beyond mkdir Basics

Creating directories in Linux might seem like one of the simplest tasks a user can do. After all, typing mkdir myfolder is practically second nature to anyone who’s spent a few minutes in the terminal. But if you’re serious about Linux system management, scripting, or automation, mastering directory creation means going beyond just the basic command. It means understanding the nuances and powerful options that mkdir offers, combining commands for scalable workflows, and preemptively handling errors like a pro.

In this post, we’ll dive deep into practical ways to create directories efficiently and reliably in Linux—the kind of know-how that increases your productivity and prevents headaches down the line.


Why Go Beyond mkdir?

Most tutorials stop at concocting the simplest mkdir command. But real mastery is leveraging all the options and patterns available to:

  • Create nested directories with one command
  • Avoid errors when directories already exist
  • Set directory permissions upfront
  • Automate complex directory structures in scripts
  • Combine directory creation with other useful commands

This helps keep your workflows clean and error-proof, critical for sysadmins, developers, and anyone working regularly on Linux.


The Basics: Remembering mkdir

For those new to Linux, here’s a quick refresher:

mkdir myfolder

Simply creates a new directory called myfolder in the current path. If you want to create multiple directories at once:

mkdir folder1 folder2 folder3

But, this basic usage quickly runs into issues when:

  • You try to create a nested directory like parent/child/grandchild but parent doesn’t exist
  • You run the command multiple times and get an error if the directory exists
  • You want specific permissions set immediately when creating the directory

Creating Nested Directories With -p

Say you want to create a deeply nested structure, such as:

projects/python/scripting

but projects and python don’t exist yet. Using regular mkdir, this will fail:

mkdir projects/python/scripting
# mkdir: cannot create directory ‘projects/python/scripting’: No such file or directory

The solution — the -p option:

mkdir -p projects/python/scripting

This creates any missing parent directories along the way.

Use case: Perfect for scripts where the full path may or may not already exist, ensuring you won’t get an error.


Avoiding Errors When Directory Already Exists: Play It Safe

If you run mkdir on an existing directory:

mkdir projects
# mkdir: cannot create directory ‘projects’: File exists

This can disrupt scripts or workflows.

By combining -p with your directory creation, Linux won’t complain if it already exists:

mkdir -p projects

You can also silence mkdir errors explicitly with:

mkdir projects 2>/dev/null || true

But -p is cleaner and preferred.


Setting Permissions on Creation: The -m Option

Often, you want your new directories to have specific permissions from the start. The -m (mode) option lets you set those permissions directly.

Example: Creating a directory with read, write, and execute permissions only for the user, but no permissions for group or others:

mkdir -m 700 secure_folder

Check permissions:

ls -ld secure_folder
drwx------ 2 user user 4096 Jun 10 12:00 secure_folder

This is handy in scripts where umask might interfere, and you want consistent access rights.


Creating Multiple Subdirectories With Brace Expansion

You can create multiple directories and subdirectories using brace expansion to avoid repetitive commands.

Example:

mkdir -p project/{docs,src/{main,test},bin}

This will create the following tree:

project/
├── bin
├── docs
└── src
    ├── main
    └── test

Try listing it:

tree project

This trick is invaluable when setting up project scaffolds quickly.


Combining Directory Creation with Other Commands

1. Creating a directory and immediately moving into it:

mkdir -p new_project && cd new_project

Brace expansion can also be combined nicely:

mkdir -p {alpha,beta,gamma} && cd alpha

2. Using mkdir in shell scripts for automation

Here’s a small snippet that checks if a directory exists, creates it if not, and logs the action:

DIR="backup/2024-06-10"

if [ ! -d "$DIR" ]; then
  mkdir -p "$DIR"
  echo "Created directory $DIR at $(date)" >> backup.log
else
  echo "Directory $DIR already exists." >> backup.log
fi

This pattern is fairly common in deployment or backup automation scripts.


Summary & Takeaways

  • The humble mkdir is more powerful than it looks—use -p to create nested structures and avoid errors if directories exist.
  • Use -m to set permissions on creation, ensuring consistent access rights.
  • Leverage brace expansion {} to create multiple subdirectories rapidly with one command.
  • Combine mkdir with logical operations and conditionals in scripts for robust automation.
  • Always script defensively: handle existing directories gracefully, test often, and log your actions when automating.

Mastering directory creation on Linux is a tiny investment that pays off huge dividends in system organization, scripting confidence, and automation reliability.


Got your own tips or directory creation use cases? Share them below, or hit me up on Twitter! Happy mkdir-ing! 🚀


Further reading: