On Tue, Oct 25, 2011 at 4:50 PM, Eric BĂ©langer <snowmaniscool@gmail.com> wrote:
No. I was waiting for feedback for the new version that I appended at the end of my last email. Allan was supposed to give it a look but I guess he was too busy with the pacman 4 release like everyone else. If that version is OK, let me know and I'll resubmit an updated git patch.
Looked at this tonight. A few observations: * We use 'KiB' instead of 'K' now, so the magic matching was busted * running one `pacman -Qi` call and one awk invocation per package really stinks and is very slow A revised version is below that pipelines and reduces calls to all programs involved. It takes 1.8 seconds now instead of a lot longer. (you can make it go faster, 0.5 seconds total, if you add a single grep call in the pipeline, but not too concerned at this point). Dave, I hope you cry at my bash skillz. -Dan $ time bash pacsysclean.sh >/dev/null real 0m1.862s user 0m1.803s sys 0m0.070s #!/bin/bash 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); }'