Files
2026-03-23 23:50:58 +00:00

72 lines
1.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#autoload
biggest() {
emulate -L zsh
setopt pipe_fail
local count=20
local pattern='*'
# Option parsing
while [[ $# -gt 0 ]]; do
case "$1" in
-n|--number)
count="$2"
shift 2
;;
-p|--pattern)
pattern="$2"
shift 2
;;
-h|--help)
cat <<'EOF'
Usage: biggest [-n COUNT | --number COUNT] [-p PATTERN | --pattern PATTERN]
-n, --number Number of entries to show (default: 20)
-p, --pattern Glob-style pattern to match names (default: *)
-h, --help Show this help and exit
The command scans up to three directory levels below the current
directory, includes hidden files and directories, and prints the
largest files/directories sorted by size. Sizes are sorted using
du -sk (numeric) and displayed using du -sh (human-readable).
EOF
return 0
;;
--)
shift
break
;;
-*)
print -u2 "biggest: unknown option: $1"
return 1
;;
*)
# Ignore unexpected positional args for now
break
;;
esac
done
# Validate count
if ! [[ "$count" == <-> ]]; then
print -u2 "biggest: COUNT must be a positive integer"
return 1
fi
# Core logic: depth 1–3, files and dirs, include hidden, suppress errors
find . -mindepth 1 -maxdepth 3 -name "$pattern" -print0 2>/dev/null \
| xargs -0 -n 100 du -sk 2>/dev/null \
| sort -nr \
| head -n "$count" \
| cut -f2- \
| tr '\n' '\0' \
| xargs -0 -I{} du -sh "{}" 2>/dev/null \
| awk '{
size=$1
$1=""
sub(/^ /,"")
# green size, blue path
printf "\033[1;32m%-8s\033[0m \033[1;34m%s\033[0m\n", size, $0
}'
}