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:
- Creates parent directories as needed
- 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.