mkdir creates new directories (folders). It's straightforward but has a few useful options.

Basic Usage

mkdir foldername

Creates a folder in the current directory.

Create Multiple Directories

mkdir folder1 folder2 folder3

Creates all three at once.

Create Nested Directories (-p)

This fails:

mkdir projects/app/src

Error:

mkdir: projects/app: No such file or directory

Use -p to create parent directories automatically:

mkdir -p projects/app/src

Creates all levels: projects, projects/app, and projects/app/src.

The -p Flag Explained

-p does two things:

  1. Creates parent directories as needed
  2. Doesn't error if the directory already exists

It's the "just make it work" flag.

Create with Specific Permissions

mkdir -m 755 newfolder

Sets permissions at creation. Common modes:

Mode Meaning
755 Owner: full access. Others: read/execute
700 Owner only
777 Everyone: full access (rarely needed)

Common Patterns

Project structure:

mkdir -p project/{src,tests,docs}

Creates:

project/
├── src/
├── tests/
└── docs/

Date-based folders:

mkdir -p backups/\$(date +%Y/%m/%d)

Creates: backups/2024/12/15/

Standard dev project:

mkdir -p myapp/{src/components,public,tests}

Verbose Mode (-v)

See what's being created:

mkdir -pv project/src/components

Output:

mkdir: created directory 'project'
mkdir: created directory 'project/src'
mkdir: created directory 'project/src/components'

Common Errors

"File exists":

mkdir existingfolder
mkdir: existingfolder: File exists

Use -p to ignore this:

mkdir -p existingfolder

No error, folder stays as is.

"Permission denied":

You don't have write access to the parent directory. Check permissions or use a different location.

"No such file or directory":

Parent folder doesn't exist. Use -p to create the whole path.

mkdir vs touch

Command Creates
mkdir name Directory (folder)
touch name Empty file

Practical Examples

New project setup:

mkdir -p ~/Projects/newapp && cd ~/Projects/newapp
mkdir -p src tests docs

Organize downloads:

mkdir -p ~/Downloads/{images,documents,archives}

Create backup destination:

mkdir -p ~/Backups/\$(date +%Y-%m-%d)

Brace Expansion

Create multiple related folders with braces:

mkdir -p project/{css,js,images}
mkdir folder{1,2,3,4,5}
mkdir test-{a,b,c}

This is a shell feature, not specific to mkdir.

Quick Reference

Command Result
mkdir folder Create folder
mkdir -p a/b/c Create nested folders
mkdir a b c Create multiple folders
mkdir -v folder Verbose output
mkdir -m 755 folder Create with permissions

Combine with cd

Create and enter:

mkdir newfolder && cd newfolder

Or as a function in ~/.zshrc:

mkcd() { mkdir -p "\$1" && cd "\$1"; }

Then:

mkcd my-new-project

Keep Learning

Creating directories is fundamental. The free course covers file management from basics to advanced.

Check it out at Mac Terminal for Humans.