delorie.com/archives/browse.cgi | search |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
Message-ID: | <41EF54F1.7090807@hotpop.com> |
Date: | Wed, 19 Jan 2005 22:51:29 -0800 |
From: | Alex <alex DOT p AT hotpop DOT com> |
Reply-To: | alex-p AT hotpop DOT com |
User-Agent: | Mozilla Thunderbird 1.0 (Windows/20041206) |
MIME-Version: | 1.0 |
To: | cygwin AT cygwin DOT com |
Subject: | Couple of scripts to remove duplicate packages |
X-Authentication-Info: | Submitted using SMTP AUTH at out008.verizon.net from [4.11.13.110] at Thu, 20 Jan 2005 00:51:28 -0600 |
--------------090407090601040705000505 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, I have a habit of keeping cygwin packages on my computer and updating them from time to time using setup.exe. This saves me time when I need to install on another computer. This creates a problem of old versions of packages accumulating in my download directory. I used to remove them by hand but that is a time consuming process. Finally I wrote an awk script to help me deal with the problem. And just for kicks I added a shell wrapper :). Attached are the scripts. I hope they could be useful to someone else. I am sure they can be improved but they have been useful to me as is. Thanks, Alex --------------090407090601040705000505 Content-Type: text/plain; name="cyg-remove-dups.awk" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cyg-remove-dups.awk" #! /bin/awk BEGIN { \ last_pkg = ""; last_date = 0; last_dir = ""; last_pkg_name = ""; cmd = "find release -type f -printf '%h %f %TY%Tm%Td\n'"; while(( cmd | getline ) > 0) { dir = $1; pkg = $2; date = $3; count = split(dir, part, "/"); if( last_pkg_name == part[count] ){ if( date < last_date ){ print dir "/" pkg; continue; }else{ print last_dir "/" last_pkg; } } last_pkg = pkg; last_date = date; last_dir = dir; last_pkg_name = part[count]; } close(cmd); } --------------090407090601040705000505 Content-Type: text/plain; name="cyg-remove-dups.sh" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cyg-remove-dups.sh" #! /bin/bash # Version of cyg-remove-dups in bash, just for kicks. Still uses awk and find # awk is used in a normal way. Trick is to pass program to it with the data # on stdin. find release -type f -printf "%h %f %TY%Tm%Td\n" | \ awk -- ' BEGIN { \ last_pkg = ""; last_date = 0; last_dir = ""; last_pkg_name = ""; } { dir = $1; pkg = $2; date = $3; count = split(dir, part, "/"); if( last_pkg_name == part[count] ){ if( date < last_date ){ print dir "/" pkg; next; }else{ print last_dir "/" last_pkg; } } last_pkg = pkg; last_date = date; last_dir = dir; last_pkg_name = part[count]; } ' --------------090407090601040705000505 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --------------090407090601040705000505--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |