jacobson@eecs.UUCP (06/26/88)
comp.sources.misc: Volume 3, Issue 60 Submitted-By: "A. Nonymous" <jacobson@eecs.UUCP> Archive-Name: vms-unix Hello, here is a little converter program I made. It has a few (2?) Berkeleyisms noted (move_flag, PATH). I'm sorry about my cheap "shar" (we should get a new one), and that I don't have a copy of your posting rules handy. # This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by jacobson at gamma.eecs.nwu.edu on Sat Jun 25 20:04:19 1988 # # This archive contains: # vms-unix # # Error checking via wc(1) will be performed. # Error checking via sum(1) will be performed. echo x - vms-unix cat >vms-unix <<'@EOF' #!/bin/sh #(Author: Dan Jacobson [jacobson@eecs.nwu.edu]) #Takes VMS filenames and backups and converts to a more UNIX style of #filenames and GNU Emacs style backups. For example: #POO.TXT;13 POO.TXT;14 POO.TXT;15 become #poo.txt.~13~ poo.txt.~14~ poo.txt #usage example: thisfile * (or quoted filenames to avoid ";"'s) #Converts VMS style filenames to lower case, ";" is dropped, all but #highest version number are converted to GNU Emacs backup style #numbering. You might ftp the files to UNIX to their own directory, #then run this file on them. was running a version of ftp that made #this conversion file necessary. Non VMS style files shouldn't get #disturbed by this program. #comment this out (or put a switch around it to test) for non Berkeley Unixes: move_flag=-i PATH=/usr/ucb:/bin:/usr/bin:/usr/local/bin #a standard safe path on my machine case $# in 0) echo "$0: usage: `basename $0` * (or quoted filenames)" >&2; exit 1 ;; esac #doesn't convert null (".;22") VMS filenames (they would map to ".") set dummy `ls -d $*| #-d: don't expand subdirectories sort +t\;nr1| #would like to sort on the last field #but only expect 1 ";" at most per path anyway sed -n ' h #basename s/.*\/// /^\.[^a-z ;.][^a-z ;.]*;[0-9][0-9]*$/b accept /^[^a-z ;.][^a-z ;.]*\.[^a-z/ ;.]*;[0-9][0-9]*$/b accept d :accept #it is a vms filename #print the FROM filename x; p #get rid of its basename s/[^/]*$// #make the TO filename basename lower case x; y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ #make the full TO filename, print it H; x; s/\n//; h; s/;[0-9][0-9]*$//; p #make the version number, print it x; s/.*;\([0-9][0-9]*\)$/\1/; p '` shift #dummy while : do case $# in 0) break;; esac oldname=$1 newname=$2 number=$3 if test -r $newname then #make it into an GNU emacs style numbered backup mv $move_flag $oldname $newname.~$number~ else #was the highest numbered VMS version mv $move_flag $oldname $newname fi shift; shift; shift done @EOF set `sum <vms-unix`; if test $1 -ne 34596 then echo ERROR: vms-unix checksum is $1 should be 34596 fi if test "`wc -lwc <vms-unix | sed -e 's/ */:/g'`" != ':65:301:2003' then echo ERROR: wc results of vms-unix are `wc -lwc <vms-unix | sed -e 's/ */:/g'` should be :65:301:2003 fi chmod 755 vms-unix exit 0