inital commit
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
#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
|
||||
}'
|
||||
}
|
||||
Reference in New Issue
Block a user