Sometime last year I wrote:

| Those who also update FreeBSD machines from source may know "make
| delete-old", which offers to delete obsolete files and directories.
| 
| Here's the same as a shell script. 

As posted, the script would also offer to delete files that have
been moved between sets, e.g., from base to comp.  Ouch.

Here's a fixed version:

--------8<-------- 
#!/bin/sh

ARCH=$(uname -m)
BASE=-rOPENBSD_5_4_BASE         # or -D...

old=$(mktemp /tmp/delete-old-XXXXXXXXXX) || exit 1
new=$(mktemp /tmp/delete-old-XXXXXXXXXX) || exit 1
trap "rm $old $new" 0 1 2 15

list=$(
        cd /usr &&
        lists=$(echo src/distrib/sets/lists/*/mi \
            src/distrib/sets/lists/*/md.$ARCH) &&
        (cd /usr/src && cvs -Rq co $BASE -p $lists >$new) &&
        sort $new >$old &&
        sort $lists >$new &&
        diff -u $old $new | sed -n 's:^-\./:/:p'
)

nl='
'
files=
libs=
dirs=
while read file; do
        if [ -f "$file" -o -h "$file" ]; then
                case $file in
                *.so.[0-9].[0-9] | \
                *.so.[0-9].[0-9][0-9] | \
                *.so.[0-9][0-9].[0-9] | \
                *.so.[0-9][0-9].[0-9][0-9] )
                        libs=${libs:+$libs$nl}$file
                        ;;
                *)
                        files=${files:+$files$nl}$file
                        ;;
                esac
        elif [ -d "$file" ]; then
                dirs=${dirs:+$dirs$nl}$file
        fi
done <<EOF
$list
EOF

delete-old-files()
{
        echo ">>> Removing old files"
        if [ -n "$files" ]; then
                exec 3>&0
                while read file; do
                        rm -i "$file" <&3
                done <<-EOF
                $files
                EOF
        fi
}

delete-old-libs()
{
        echo ">>> Removing old libraries"
        if [ -n "$libs" ]; then
                exec 3>&0
                while read file; do
                        rm -i "$file" <&3
                done <<-EOF
                $libs
                EOF
        fi
}

delete-old-dirs()
{
        echo ">>> Removing old directories"
        if [ -n "$dirs" ]; then
                while read file; do
                        rmdir "$file" && echo "$file"
                done <<-EOF
                $dirs
                EOF
        fi
}

delete-old-files
delete-old-libs
delete-old-dirs
-------->8--------

-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to