#!/bin/csh -f # #Sorry Mike (or other maintainer) # #but this is the first time I have added something. # #This is a super awesome unix ftp script (IMHO). # #I know you guys like people to use gopher and other #things but I found this to be really slick. # #I hope I put this in the right place and have given #you enough info. # #Thanks! # #-Jack # # #/---------------------------------------------------------\ #| Jack W. Judy Office: (510) 642-1010 | #| Electrical Engineering FAX: (510) 643-6637 | #| 497 Cory Hall (BSAC) Lab: (510) 642-2716 | #| University of California Home: (510) 849-2604 | #| Berkeley, CA 94720 email: j.judy@ieee.org | #\---------------------------------------------------------/ # # ftpumich # # This script was written for all those people frustrated with the limited # number of guest logins at the popular umich Mac archive. It skips from # mirror to mirror until it succeeds. It always works for me. NO MORE WAITING. # # Comments and suggestions/improvements are welcome. # # Written by Jack Judy 12-21-93 # # Some variables you may want to tweek to your liking. @ sleep_time = 0 @ maxcount = 1 @ VERBOSE = 1 if ( $#argv == 0 || $#argv > 1 ) then if ( $VERBOSE == 1 ) then echo "" echo "usage: ftpumich [file_containing_compete_pathnames]" echo "usage: ftpumich" echo "" echo "The file (file_containing_compete_pathnames) holds the COMPLETE" echo "pathnames of the files you want to 'ftp'. The pathname format" echo "of the files is that of the awesome archive at archive.umich.edu." echo "" echo "Example:" echo "" echo "j.judy@ieee.org 22> cat new_umich_stuff" echo "/mac/00help/newthings.txt" echo "/mac/00ls-lRfile" echo "j.judy@ieee.org 23> ftpumich new_umich_stuff" echo "" echo "The order in which the ftp sites/mirrors are attempted" echo "is given below. The first ftp site is choosen to be the" echo "uiowa site because things are not binhexed. Saves work." echo "" echo " grind.isca.uiowa.edu in mac/umich (no .hqx)" echo " archive.umich.edu in mac" echo " wuarchive.wustl.edu in mirrors/archive.umich.edu/mac" echo " archive.orst.edu in pub/mirrors/archive.umich.edu/mac" echo " archie.au in micros/mac/umich" echo " nic.switch.ch in mirror/umich-mac" echo " src.doc.ic.ac.uk in packages/mac/umich (with .gz)" echo " ftp.sunet.se in /pub/mac/mirror-umich" echo " ftp.inter.spin.ad.jp in pub/Mac/Merit.mirror" echo " ftp.technion.ac.il in pub/unsupported/mac/umich" echo " nctuccca.edu.tw in /Macintosh/umich-mac" echo " anl.anl.fr in /pub/mac/umich (with .z)" echo "" echo "If you pass no arguments then the files" echo " /mac/00help/newthings.txt" echo " /mac/00ls-lRfile" echo "will be transfered so that you may browse them for the files" echo "you wish to download." echo "" echo "A file called newthings.txt.greped will be created that holds" echo "only the complete pathnames for the newest files in the archive." echo "" echo "The easiest way to download files is to edit this file (newthings.txt.greped)" echo "and delete all the lines except for the files you wish to download." echo "Then simply rerun ftpumich with this edited file as the argument." echo "Presto. All the files will be obtained .. every time (practically)." echo "" echo "This program creates ~/.netrc macros. Each macro can't exceed 4k" echo "which is just less than attempting to ftp all the new files." echo "The ~/.netrc file is used and so a backup copy is saved as" echo "~/.netrc.ftpumich incase there is some sort of problem and" echo "your ~/.netrc file is not restored. Re-running this script with" echo "will not copy of the backup but instead it will restore the" echo "original ~/.netrc file." echo "" echo "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" echo "" endif if ( $#argv > 1 ) then exit 1 endif endif if ( $#argv == 0 ) then echo "/mac/00help/newthings.txt"> ftpumich.tmp echo "/mac/00ls-lRfile" >> ftpumich.tmp set file = ftpumich.tmp if ( -f newthings.txt ) then rm -f newthings.txt endif if ( -f 00ls-lRfile ) then rm -f 00ls-lRfile endif else set file = $1 endif echo "" echo "-----------------------------------------------------------------" echo "Now attmpting to ftp the following files:" cat $file echo "-----------------------------------------------------------------" echo "" if ( ! (-f ~/.netrc.ftpumich) && -f ~/.netrc ) then mv ~/.netrc ~/.netrc.ftpumich endif foreach machine ( grind.isca.uiowa.edu archive.umich.edu mirror.archive.umich.edu wuarchive.wustl.edu archive.orst.edu nic.switch.ch ftp.sunet.se ftp.inter.spin.ad.jp archie.au src.doc.ic.ac.uk anl.anl.fr ftp.technion.ac.il nctuccca.edu.tw ) @ count = 0 echo "machine $machine" > ~/.netrc echo "login anonymous" >> ~/.netrc if ( -f ~/.forward ) then echo "password `cat ~/.forward`" >> ~/.netrc else echo "password `echo $user`@`hostname`" >> ~/.netrc endif echo "macdef init" >> ~/.netrc echo "bin" >> ~/.netrc echo "hash" >> ~/.netrc echo "prompt" >> ~/.netrc # Defaults: set hqx = .hqx set suffix = "" switch ($machine) case grind.isca.uiowa.edu: set dir = /mac/umich set hqx = breaksw case archive.umich.edu: set dir = /mac breaksw case mirror.archive.umich.edu: set dir = /pub/mirrors/archive.umich.edu/mac breaksw case wuarchive.wustl.edu: set dir = /mirrors/archive.umich.edu/mac breaksw case archive.orst.edu: set dir = pub/mirrors/archive.umich.edu/mac breaksw case nic.switch.ch: set dir = mirror/umich-mac breaksw case ftp.sunet.se: set dir = /pub/mac/mirror-umich breaksw case ftp.inter.spin.ad.jp: set dir = pub/Mac/Merit.mirror breaksw case archie.au: set dir = /micros/mac/umich breaksw case ftp.technion.ac.il: set dir = pub/unsupported/mac/umich breaksw case src.doc.ic.ac.uk: set dir = /packages/mac/umich set suffix = ".gz" breaksw case anl.anl.fr: set dir = /pub/mac/umich set suffix = ".z" breaksw case nctuccca.edu.tw: set dir = /Macintosh/umich-mac breaksw endsw echo "### /;^) Attmepting to connect to $machine /;^) ###" echo "" echo "cd $dir" >> ~/.netrc cat $file | sed -e 's/^\/mac\///' | sed -e 's/.hqx//' | awk -F/ '{print "get", $0"'$hqx$suffix'", $NF"'$hqx$suffix'" }' >> ~/.netrc endif echo "quit" >> ~/.netrc echo "" >> ~/.netrc chmod 600 ~/.netrc set length_before = `/bin/ls -l | wc -l` while ( `/bin/ls -l | wc -l` <= $length_before && $count < $maxcount ) ( echo "quit" ) | ftp $machine if ( `/bin/ls -l | wc -l` == $length_before ) then @ count ++ echo "" echo "### /:^( Attempt #"$count" of $maxcount to connect to $machine has failed. /:^( ###" echo "" echo "-----------------------------------------------------------------" echo "" sleep $sleep_time else echo "" echo "-----------------------------------------------------------------" echo "" @ new = `/bin/ls -l | wc -l` - $length_before echo "Finished ftp'ing (Successfully I think. Number of new files = ($new)" echo "" mv ~/.netrc.ftpumich ~/.netrc chmod 600 ~/.netrc rm -f ftpumich.tmp if ( $#argv == 0 ) then if ( -f newthings.txt.gz ) then unzip newthings.txt.gz endif if ( -f newthings.txt.Z ) then uncompress newthings.txt.Z endif cat newthings.txt | grep "^\/mac\/" > newthings.txt.greped echo "" echo "Please edit the file called (newthings.txt.greped) and delete the lines" echo "that contain filenames you do not wish to ftp." compress 00ls-lRfile echo "" endif exit 0 endif end end echo "All attempts to ftp have failed." mv ~/.netrc.ftpumich ~/.netrc chmod 600 ~/.netrc rm -f ftpumich.tmp