Codebase list debian-goodies / d1427077-c47c-4230-856b-985515555147/main dpkg-info
d1427077-c47c-4230-856b-985515555147/main

Tree @d1427077-c47c-4230-856b-985515555147/main (Download .tar.gz)

dpkg-info @d1427077-c47c-4230-856b-985515555147/mainraw · history · blame

#!/bin/bash
# convenience script to show information about debian
# packages in a nice, colourful, human-readable way

{ type dpkg-query && type apt-cache; } >/dev/null || { echo "This mechanism needs dpkg and apt. Are you even on Debian?"; exit 1; }
{ type ccze && type sed && type du && type less; } >/dev/null || { echo "This mechanism needs ccze, sed, coreutils and less."; exit 1; }

dpkg-info()
{
    for pkg in ${@};
    do
        {
            {
                apt-cache policy ${pkg} 2>&1 && echo
                dpkg-query -s ${pkg} 2>/dev/null && echo
            } | ccze -A -o nolookups && {
                IFS=${IFS/ /}
                list=($(dpkg -L ${pkg} 3>/dev/null | sed "s|^[^/]*||"|tail --lines=+2)) &&
                [ ${#list[*]} -gt 0 ] &&
                for item in ${list[@]};
                do
                    {
                        [ -L "${item}" ] && [ ! -d $(realpath "${item}" 2>/dev/null) ] &&
                        links=("${links[@]}" "${item}") ||
                        [ -f "${item}" ] &&
                        files=("${files[@]}" "${item}") ||
                        dirs=("${dirs[@]}" "${item}")
                    }
                done
                [ ${#files[@]} -gt 0 ] &&
                echo -ne "package ${pkg} contains:\t " &&
                { echo -n "$(LANG=C du -hc ${files[@]} | sed -nr "s/(.*)\s+total/\1iB/p") in ${#files[@]} $(ngettext 'file' 'files' ${#files[@]})" &&
                { [ ${#links[@]} -eq 0 ] || echo -n " and ${#links[@]} $(ngettext 'symbolic link' 'symbolic links' ${#links[@]})"; } &&
                echo " within ${#dirs[@]} $(ngettext 'directory' 'directories' ${#dirs[@]})"; } | ccze -A -o nolookups && echo &&
                ls --color=always -lahd --time-style=+" %^a %F %R" "${list[@]}"
                debsums -s ${pkg}
            } 2>&1
            echo
            {
                apt-cache show ${pkg}
                apt-cache showsrc ${pkg}
            } | ccze -A -o nolookups
        } | less -SRiM~ --shift 1 -PM"debian package info\: ${pkg}, ?ltlines %lt-%lb?L/%L.:byte %bB?s/%s. .?e(END)"
    done
}

dpkg-info ${@}