mkdir – create directories

mkdir command
mkdir command

mkdir creates new directories. It’s a fundamental command for organizing your filesystem.

Synopsis

mkdir [OPTIONS] DIRECTORY...

Common Options

OptionDescription
-pCreate parent directories as needed
-m MODESet permissions (like chmod)
-vVerbose, 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

  • rmdir — Remove empty directories
  • rm — Remove files and directories
  • touch — Create empty files
  • ls — List directory contents

Tutorials