index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Eric Bélanger <snowmaniscool@gmail.com> | 2011-11-21 17:21:24 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-12-12 12:48:50 -0600 |
commit | b75fac5be31d6056e78fd29a0548cc3e6275a1b8 (patch) | |
tree | acb6406afd20db23b2637bc8946fb68638551f68 /contrib/pacsysclean.in | |
parent | 6a1d3948a670184f01a697efe55b91b4ccdcb51d (diff) |
-rwxr-xr-x | contrib/pacsysclean.in | 50 |
diff --git a/contrib/pacsysclean.in b/contrib/pacsysclean.in new file mode 100755 index 00000000..c87082e0 --- /dev/null +++ b/contrib/pacsysclean.in @@ -0,0 +1,50 @@ +#!/bin/bash + +# pacsysclean - Sort installed packages by decreasing installed size. Useful for system clean-up. + +PACMAN_OPTS= + +usage() { + echo "pacsysclean - Sort installed packages by decreasing installed size." + echo + echo "Usage: pacsysclean [options]" + echo + echo "Options:" + echo " -o <options> Specify custom pacman query options (e.g., dt)" + echo " -h, --help Show this help message and exit" +} + + +if [ -n "$1" ]; then + case "$1" in + -o) PACMAN_OPTS="${2}" ;; + -h|--help) usage; exit 0 ;; + *) usage; exit 1 ;; + esac +fi + +IFS=$'\n' +name="^Name.*: (.*)$" +size="^Installed Size.*: (.*) KiB$" +for line in $(LANG=C pacman -Qi $PACMAN_OPTS); do + if [[ $line =~ $name ]]; then + printf "%s\t" ${BASH_REMATCH[1]} + elif [[ $line =~ $size ]]; then + printf "%s\n" ${BASH_REMATCH[1]} + fi +done | sort -g -k2 | awk ' +BEGIN { + split("KiB MiB GiB TiB PiB EiB ZiB YiB", suffix) +} +function format_size(size) { + count = 1 + while (size + 0 > 1024) { + size /= 1024 + count++ + } + sizestr = sprintf("%.2f %s", size, suffix[count]) + return sizestr +} +{ + printf("%s\t%s\n", format_size($2), $1); +}' |