After I viewed setup.ini, I decide to write a little script to do this.
Currently, it scans all the sub-directory of cygwin local package directory,
and delete all the old files which not listed in setup.ini or setup-2.ini.

Wish it can help someone like me. 

download it from nabble.com:
http://old.nabble.com/file/p26590979/cleanOldPackages_UTF8.sh
cleanOldPackages_UTF8.sh 

or copy the following code to a .sh file:
<pre>
#
# 将本脚本文件放到与 setup.exe 相同的目录下,然后执行之
# Put this script file to the directory which contains setup.exe, and
execute it
#

echo
"################################################################################"
echo "                   清理 Cygwin 旧安装包                                        
"
echo "            Clean Old Install Packages of Cygwin                          
     
"
echo "                                                                          
     
"
echo "           by LiuYan<lovetide@qq.com> 2009-12-01                          
    
"
echo
"################################################################################"
echo
echo "Usage 用法:"
echo "    $0 [-d] [-g][-l]"
echo "      -d  Do delete file if file is old 执行删除操作"
echo "      -g, -l  Generate file delete commands to a script file 生成删除文件脚本"
echo

o_delete=false
o_list=false
while getopts "dgl" option
do
        case $option in
                d)
                        o_delete=true
                        ;;
                g|l)
                        o_list=true
                        rm_command_list_file=rm_old_packages_`date +%F`.sh
                        rm -f "$rm_command_list_file"
                        ;;
                *)
                        ;;
        esac
done

SCRIPT_BASE_DIR=`dirname $0`
#echo "SCRIPT_BASE_DIR=$SCRIPT_BASE_DIR"
BeginTime=`date "+%F %T %N"`

# 查找所有子目录下的 setup.ini 和 setup-2.ini 文件
# Search setup.exe or setup-2.exe in sub-directories

setup_ini_file_list=`find $SCRIPT_BASE_DIR -name setup.ini -or -name
setup-2.ini`
echo "$setup_ini_file_list" > cop_setup_ini_file_list.txt

# 对比 setup.ini 中的“最新文件列表”与本地目录中的文件,清理不在“最新文件列表”中的旧文件
# Compair the "Newest File List" in setup.ini and the local files, clean old
files which not exist in "Newest File List"

total_old_file_count=0
for setup_ini_file in $setup_ini_file_list
do
        echo
        MIRROR_BASE_DIR=`dirname $setup_ini_file`
        setup_ini_file_short_name=`basename $setup_ini_file`
        
        if [ $setup_ini_file_short_name == "setup-2.ini" ]
        then
                PACKAGE_BASE_DIR="$MIRROR_BASE_DIR/release-2/"
        else
                PACKAGE_BASE_DIR="$MIRROR_BASE_DIR/release/"
        fi

        echo "INI file         : $setup_ini_file"
        echo "Package directory: $PACKAGE_BASE_DIR"
        echo "Processing ..."
        
        # 得到 setup.ini 中的“最新文件列表”
        # Get the "Newest File List" from setup.ini

        newest_file_list=`gawk -F ' ' '/install:|source:/{print $2}'
$setup_ini_file`
        newest_file_list_file=cop_newest_file_list${setup_ini_file//\//__}.txt
        echo "$newest_file_list" > $newest_file_list_file
        
        # 遍历安装包文件夹,删除不在“最新文件列表”中的文件
        # Search install package directory recursively, delete files not exist 
in
"Newest File List"
        
        local_file_list=`find "$PACKAGE_BASE_DIR" -type f`
        package_old_file_count=0
        for local_file in $local_file_list
        do
                local_file_in_setup_ini_format=${local_file#${MIRROR_BASE_DIR}/}
                
                file_is_fresh=false
                ## via grep
                grep -i "$local_file_in_setup_ini_format" 
$newest_file_list_file >
/dev/null
                if [ $? -eq 0 ]
                then
                        file_is_fresh=true
                fi

                # via bash conditional expression (=~ binary operator)
                #if [[ $newest_file_list =~ $local_file_in_setup_ini_format ]]
                #then
                #       file_is_fresh=true
                #fi
                
                if $file_is_fresh
                then
                        echo "  $local_file_in_setup_ini_format"
                else
                        echo "X $local_file_in_setup_ini_format"
                        (( total_old_file_count ++ ))
                        (( package_old_file_count ++ ))

                        if $o_list
                        then
                                echo "rm -f \"$local_file\"" >> 
$rm_command_list_file
                        fi
                        if $o_delete
                        then
                                rm -f $local_file
                                exit_code=$?
                                echo -n "Delete $local_file ..."
                                if [ $exit_code -eq 0 ]
                                then
                                        echo Done!
                                else
                                        echo Failed with code $exit_code!
                                fi

                        fi
                fi
        done
        echo "$package_old_file_count old files in $PACKAGE_BASE_DIR"
done

EndTime=`date "+%F %T %N"`
echo
echo "Total $total_old_file_count old files"
echo "BeginTime: $BeginTime"
echo "EndTime  : $EndTime"
</pre>



Christopher Faylor-8 wrote:
> 
> On Sun, Nov 29, 2009 at 07:19:07PM -0800, LiuYan ?????? wrote:
>>
>>I'm using Cygwin for several years, it help me very much in my work.
>>
>>There's a tiny issue: after downloaded in several years, the total size of
>>my local setup packages directory had grown up to G bytes, while a fresh
>>setup packages of mine are only <40M bytes.
> 
> So, why not just remove your local setup packages directory?  There is no
> reason to keep it around.
> 
> cgf
> 
> --
> Problem reports:       http://cygwin.com/problems.html
> FAQ:                   http://cygwin.com/faq/
> Documentation:         http://cygwin.com/docs.html
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Cygwin-setup.exe%3A-Clean-historical-setup-packages-tp26569064p26590979.html
Sent from the Cygwin list mailing list archive at Nabble.com.


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to