diff options
-rw-r--r-- | contrib/.gitignore | 1 | ||||
-rw-r--r-- | contrib/Makefile.am | 5 | ||||
-rwxr-xr-x | contrib/paccache.in | 2 | ||||
-rwxr-xr-x | contrib/pacsysclean.in | 50 |
4 files changed, 56 insertions, 2 deletions
diff --git a/contrib/.gitignore b/contrib/.gitignore index 1bd145fc..19b81e00 100644 --- a/contrib/.gitignore +++ b/contrib/.gitignore @@ -6,5 +6,6 @@ paclist paclog-pkglist pacscripts pacsearch +pacsysclean wget-xdelta.sh zsh_completion diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 970e17b8..c9f63654 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -5,7 +5,8 @@ OURSCRIPTS = \ paclist \ paclog-pkglist \ pacscripts \ - pacsearch + pacsearch \ + pacsysclean OURFILES = \ bash_completion \ @@ -21,6 +22,7 @@ EXTRA_DIST = \ paclist.in \ pacscripts.in \ pacsearch.in \ + pacsysclean.in \ vimprojects \ zsh_completion.in \ README @@ -56,6 +58,7 @@ paclist: $(srcdir)/paclist.in paclog-pkglist: $(srcdir)/paclog-pkglist.in pacscripts: $(srcdir)/pacscripts.in pacsearch: $(srcdir)/pacsearch.in +pacsysclean: $(srcdir)/pacsysclean.in pactree: $(srcdir)/pactree.in zsh_completion: $(srcdir)/zsh_completion.in diff --git a/contrib/paccache.in b/contrib/paccache.in index 847d44fb..b95b9646 100755 --- a/contrib/paccache.in +++ b/contrib/paccache.in @@ -263,7 +263,7 @@ if (( move || delete )); then fi # unlikely that this will fail, but better make sure -cd "$cachedir" || die "failed to chdir to \`%s'" "$cachedir" +cd "$cachedir" >/dev/null || die "failed to chdir to \`%s'" "$cachedir" # note that these results are returned in an arbitrary order from awk, but # they'll be resorted (in summarize) iff we have a verbosity level set. 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); +}' |