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