J—P

Currently accepting new projects and available for hire.

Find Dirty Git Repositories

A tiny shell script that recursively scans a directory for Git repositories with uncommitted changes, nicknamed dirgit—a play on words combining "directory", "dirty", and "git".

#!/bin/bash

# Use current directory or first argument
ROOT="${1:-$(pwd)}"

# Find all Git repositories and check for dirty state
find "$ROOT" -type d -name ".git" 2>/dev/null | while read -r gitdir; do
    repo="$(dirname "$gitdir")"
    cd "$repo" || continue
    if [[ -n $(git status --porcelain) ]]; then
        echo "$repo"
    fi
done

Save it as dirgit (or any name you prefer), make it executable (chmod +x dirgit), and place it in /usr/local/bin or ~/bin to use it globally.

Usage

dirgit         # scan current directory
dirgit ~/code  # scan a specific directory