A while back i wrote a similar script which extracts the .PKGINFO file from each package in one's cache. slow, but I think this is a more accurate way to compare versions. as-is, it will cp $N versions back from installed packages (inclusive) to $WD/saveme, where N and WD are defined in the script. i use it to save the N version, clean out my cache, then move them back. but i think you could easily modify it to suit your usage case instead of moving N versions to saveme you could echo the filename into a saveme.lst, then mv anything not in saveme.lst to your oldpkg directory. or you could just take my little .PKGINFO / awk trickery and merge it into your script... or you could just ignore me and go with mod times :). anyways, more info is always better, right? i've attached the script for you to peruse. thanks, pat On 08/25/09 at 12:51am, David C. Rankin wrote: > On Monday 24 August 2009 11:51:45 pm David C. Rankin wrote: > > > <snip> > > The script for finding and moving older duplicate packages is named fduppkg and is fairly self-explanitory. Running without arguments gives the options: > > > > BASH never fails to amaze me, 3116 element array to handle the packages, and BASH never batted an eye. It just kept on trucking.... > > [00:41 archangel:/home/david/scripts/file] # ./fdup-archpkg -v > > <big snip> > > ${SARRAY[3114]} zenity-2.26.0-1-x86_64.pkg.tar.gz > Search filename: zenity > Search Architecture: x86_64 > Duplicate filename: zenity > Duplicate Architecture: x86_64 > Keeping: /var/cache/pacman/pkg/zenity-2.26.0-2-x86_64.pkg.tar.gz > Duplicate found: 1 > Search filename: zenity > Search Architecture: x86_64 > Duplicate filename: zenity > Duplicate Architecture: x86_64 > `/var/cache/pacman/pkg/zenity-2.26.0-1-x86_64.pkg.tar.gz' -> `/home/backup/pkg-old/zenity-2.26.0-1-x86_64.pkg.tar.gz' > removed `/var/cache/pacman/pkg/zenity-2.26.0-1-x86_64.pkg.tar.gz' > Duplicate found: 2 > > ${SARRAY[3116]} zip-3.0-1-x86_64.pkg.tar.gz > Search filename: zip > Search Architecture: x86_64 > Duplicate filename: zip > Duplicate Architecture: x86_64 > Keeping: /var/cache/pacman/pkg/zip-3.0-1-x86_64.pkg.tar.gz > Duplicate found: 1 > > Done! > > [00:43 archangel:/home/david/scripts/file] # du -hcs /var/cache/pacman/pkg/ > 3.0G /var/cache/pacman/pkg/ > 3.0G total > [00:48 archangel:/home/david/scripts/file] # du -hcs /home/backup/pkg-old/ > 5.2G /home/backup/pkg-old/ > 5.2G total > > There's an extra 5.2G back ;-) > > -- > David C. Rankin, J.D.,P.E. > Rankin Law Firm, PLLC > 510 Ochiltree Street > Nacogdoches, Texas 75961 > Telephone: (936) 715-9333 > Facsimile: (936) 715-9339 > www.rankinlawfirm.com -- patrick brisbin
#!/bin/bash # # pbrisbin 2009 # ### N=3 # how may versions to keep -- includes installed PD="/var/cache/pacman/pkg" WD="/tmp/pacclean" rm -rf $WD mkdir -p $WD/saveme LC_ALL="C" pushd $WD &>/dev/null || exit 1 for package in $(find $PD -name *.pkg.tar.gz | sort -r); do gunzip < $package | tar -xf - .PKGINFO || exit 1 file="$package" name="$(awk '/^pkgname/ {print $3}' .PKGINFO)" vers="$(awk '/^pkgver/ {print $3}' .PKGINFO)" echo "$name $vers $file" >> $WD/all.lst done popd &>/dev/null || exit 1 pacman -Qq | while read pack; do grep -m $N ^$pack\ $WD/all.lst | awk '{print $3}' | while read file; do cp -av $file $WD/saveme/ done done echo "up to $N versions of each installed package are now in $WD/saveme" echo "please verify everything you want is there before clearing your cache" exit 0