Skip to content

CLI Power Tools

Modern replacements for standard Unix utilities. Faster, more intuitive defaults, and better output.

ripgrep — faster grep

Recursively search file contents, respecting .gitignore by default:

rg "TODO" --type py

Search with context (3 lines before and after):

rg -C 3 "function.*auth"

Search only specific file types:

rg "import" --type ts --type tsx

Install: brew install ripgrep · apt install ripgrep · winget install BurntSushi.ripgrep


fd — faster find

Find files by name with sensible defaults:

fd "\.json$" src/

Find and delete all .DS_Store files:

fd -H .DS_Store -x rm

Find files modified in the last hour:

fd --changed-within 1h

Install: brew install fd · apt install fd-find · winget install sharkdp.fd


bat — better cat

View files with syntax highlighting and line numbers:

bat src/index.ts

Show only a range of lines:

bat --line-range 20:40 config.yml

Use as a man pager:

export MANPAGER="sh -c 'col -bx | bat -l man -p'"

Install: brew install bat · apt install bat · winget install sharkdp.bat

Ubuntu/Debian

The binary is installed as batcat due to a name conflict. Create an alias: alias bat='batcat'


eza — modern ls

List files with git status and icons:

eza -la --git --icons

Tree view with depth limit:

eza --tree --level=2

Install: brew install eza · cargo install eza · winget install eza-community.eza


zoxide — smarter cd

Jump to a frequently used directory:

z projects

Interactive directory picker (requires fzf):

zi

Add to your shell (put in .zshrc or .bashrc):

eval "$(zoxide init zsh)"

Install: brew install zoxide · cargo install zoxide · winget install ajeetdsouza.zoxide


fzf — fuzzy finder

Interactive fuzzy search for anything piped to it:

find . -type f | fzf

Search and open a file in your editor:

vim $(fzf)

Preview files while browsing:

fzf --preview 'bat --color=always {}'

Install: brew install fzf · apt install fzf · winget install junegunn.fzf


jq — JSON processor

Pretty-print JSON:

curl -s https://api.example.com/data | jq .

Extract a specific field:

cat data.json | jq '.users[].name'

Filter and transform:

jq '[.items[] | select(.status == "active") | {name, id}]' data.json

Install: brew install jq · apt install jq · winget install jqlang.jq


delta — better git diffs

Configure as your default git diff pager:

git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"

Side-by-side view:

git diff | delta --side-by-side

Install: brew install git-delta · cargo install git-delta