mkdir – create directories

mkdir creates new directories. It’s a fundamental command for organizing your filesystem.
Synopsis
mkdir [OPTIONS] DIRECTORY...
Common Options
| Option | Description |
|---|---|
-p | Create parent directories as needed |
-m MODE | Set permissions (like chmod) |
-v | Verbose, print each directory created |
Examples
Create a single directory
$ mkdir projects
$ ls -d projects
projects
Create multiple directories
$ mkdir docs src tests
$ ls
docs src tests
Create nested directories with -p
Without -p, this would fail:
$ mkdir -p projects/webapp/src/components
$ tree projects/
projects/
└── webapp
└── src
└── components
Create with specific permissions
$ mkdir -m 700 private_folder
$ ls -ld private_folder
drwx------ 2 greys staff 4096 Jan 15 10:00 private_folder
Verbose output
$ mkdir -pv ~/project/{src,lib,bin,docs}
mkdir: created directory '/home/greys/project'
mkdir: created directory '/home/greys/project/src'
mkdir: created directory '/home/greys/project/lib'
mkdir: created directory '/home/greys/project/bin'
mkdir: created directory '/home/greys/project/docs'
Using brace expansion
Create multiple subdirectories at once:
$ mkdir -p project/{src,tests,docs}/{v1,v2}
$ tree project/
project/
├── docs
│ ├── v1
│ └── v2
├── src
│ ├── v1
│ └── v2
└── tests
├── v1
└── v2
Create dated directories
$ mkdir $(date +%Y-%m-%d)
$ ls
2025-01-29
Common Errors
Directory exists
$ mkdir projects
mkdir: cannot create directory 'projects': File exists
Use -p to ignore if exists:
$ mkdir -p projects # No error
Permission denied
$ mkdir /root/test
mkdir: cannot create directory '/root/test': Permission denied
Parent doesn’t exist
$ mkdir /tmp/a/b/c
mkdir: cannot create directory '/tmp/a/b/c': No such file or directory
$ mkdir -p /tmp/a/b/c # Works!
Tips
- Always use -p when scripting — it’s safer and idempotent
- Brace expansion is powerful for project scaffolding
- Combine with cd:
mkdir -p newdir && cd newdir - Set umask to control default permissions for new directories
See Also
Related Commands
- rmdir — Remove empty directories
- rm — Remove files and directories
- touch — Create empty files
- ls — List directory contents






