[pacman-dev] [PATCH] pacsysclean: Add new contrib script
Eric Bélanger
snowmaniscool at gmail.com
Wed Nov 16 20:19:57 EST 2011
On Wed, Nov 16, 2011 at 12:04 AM, Dan McGee <dpmcgee at gmail.com> wrote:
> On Tue, Oct 25, 2011 at 4:50 PM, Eric Bélanger <snowmaniscool at 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
Yeah, I haven't looked at it since pacman 4 is out.
> * running one `pacman -Qi` call and one awk invocation per package
> really stinks and is very slow
>
Thanks for fixing and improving it. There's only a minor change to do
(see inline script) and the rest is fine with me. I noticed that you
changed the sorting order but I could add an option for that later
once it's pushed to master or maint. I'll wait a few days in case
there are other people who wants to comment, then I'll submit that
version in a proper git patch.
>
> 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)"
replace by:
echo " -o <options> Specify custom pacman query options (e.g., dt)"
as "pacsysclean -o -dt" doesn't work.
> 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);
> }'
>
>
More information about the pacman-dev
mailing list