delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/01/20/01:51:50

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--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019