#!/bin/sh get_size() { size="$1->$3" } do_src() { if was=`du -sh usr/src 2> /dev/null`; then tar cf - usr/src | bzip2 -9 > src.tar.bz2 is=`du -sh src.tar.bz2` rm -rf usr/src & get_size $was $is else size="missing" fi printf "src %s" "$size" > summary } do_collect() { > exec > dyn > rel > archive find usr/lib* -type f -print0 | xargs --no-run-if-empty -0 file -N -F ' ' -i | awk -v dir="$dir" -v src="$size" ' BEGIN { e = d = r = u = a = 0 } NF == 2 && $2 == "application/x-executable" { print $1 > "exec" ; ++e; next } NF == 2 && $2 == "application/x-sharedlib" { print $1 > "dyn" ; ++d; next } NF == 2 && $2 == "application/x-object" { print $1 > "rel" ; ++r; next } NF == 2 && $2 == "application/x-archive" { print $1 > "archive" ; ++a; next } { print "unexpected line from", dir ": " $0 > "/dev/stderr"; ++u; print $0 > "bogon"; next } END { printf "exec %d dyn %d rel %d archive %d", e, d, r, a; if (u) printf " bogons %d", u; print "" }' } do_dir() { cd "$dir" do_src & find usr/lib/debug -type f ! -links 1 -exec rm -f {} \; 2> /dev/null if was=`du -sh usr/lib/debug 2> /dev/null`; then summary=`do_collect` (echo 'all: \' sed 's,$,.bz2,;$!s,$,\\,' exec dyn rel echo '%.bz2: %; bzip2 -9 $<' ) | make -s -r -f - -j`getconf _NPROCESSORS_ONLN` is=`du -sh usr/lib/debug` get_size $was $is summary="$summary bz2 $size" else summary="debug missing" fi wait echo " $summary" >> summary cd .. echo "packed $dir" } while read dir; do if [ -r "$dir/summary" ]; then echo >&2 "$dir looks packed" continue fi do_dir done wait