Skip to main content

How to Remove Directory in Bash

• 2 min read
bash file operations remove directory rmdir

Quick Answer: Remove Directory in Bash

To delete an empty directory in Bash, use rmdir dirname. To delete a directory with contents, use rm -r dirname. Always test with ls first to verify what you’re deleting, especially with -r.

Quick Comparison: Directory Removal Methods

MethodUsageFor EmptyFor FilledSafety
rmdirrmdir dirYesNoSafe
rm -rrm -r dirYesYesDangerous
rm -riInteractiveYesYesSafer
find -deleteComplexYesYesControlled
rm -rfForcedYesYesVery dangerous

Bottom line: Use rmdir for empty dirs, rm -ri for filled dirs (interactive mode).


Delete directories in Bash.

Method 1: Remove Empty Directory

rmdir empty_dir

Works only if directory is empty. Safe option.

Method 2: Remove Directory and Contents

# Remove directory and everything in it
rm -r mydir

# With confirmation
rm -ri mydir

Method 3: Force Removal (Caution!)

# Remove without confirmation (DANGEROUS)
rm -rf mydir/

Always test before using -f!

Useful Options

OptionPurpose
-rRecursive (remove contents)
-iInteractive (ask before each delete)
-vVerbose (show what’s deleted)
-fForce (no confirmation)
rmdirOnly for empty directories

Practical Examples

Safe Directory Removal

dir="/home/user/old_project"

# Check what will be deleted
echo "Files to delete:"
find "$dir"

# Ask for confirmation
read -p "Delete this directory? (y/n) " confirm
[ "$confirm" = "y" ] && rm -r "$dir"

Remove Empty Directories

# Only remove if empty
rmdir /home/cleanup/dir1 /home/cleanup/dir2

Remove Old Backups

backup_dir="/home/backups"

# Remove directories older than 30 days
find "$backup_dir" -type d -mtime +30 -exec rm -r {} \;

Remove with Exclusions

# Remove but keep important files
rm -r mydir/

# Or before deletion:
find mydir -name "important.txt" -move  # save first
rm -r mydir/

Remove Hidden Directories

# Remove .git directory
rm -r .git/

# Be careful with .hidden directories
rm -ri .*/  # Ask before each

Safety Checklist

  • Check directory exists: ls -la dir
  • List contents: find dir
  • Consider backup: cp -r dir dir.bak
  • Test deletion on test data first
  • Use -i for confirmation
  • Avoid -f unless absolutely necessary

Dangerous! Don’t Do This

rm -rf /        # Delete entire system!
rm -rf /*       # Delete all root directories
rm -rf $VAR/*   # If $VAR is empty, deletes root!

Always double-check paths!

Safer Pattern

#!/bin/bash

target_dir="$1"

# Validate
if [ ! -d "$target_dir" ]; then
  echo "ERROR: Directory not found: $target_dir"
  exit 1
fi

# Confirm
read -p "Delete $target_dir? (y/n) " confirm
[ "$confirm" != "y" ] && exit 0

# Delete
rm -rv "$target_dir"

Key Points

  • Use rmdir for empty directories only
  • Use rm -r for directories with contents
  • Always use -i when learning
  • Avoid -f in scripts (ask for confirmation)
  • Test paths carefully before deletion