[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