#!/bin/sh # # mved --- Move-and-edit filenames. # # Usage: mved [-n] [-c] from-pattern to-pattern # Options: -n do nothing, just show what would be done. # -c rename copy instead of move # # The '=' character in from-pattern is treated as a special wildcard, # matching in the same way as the shell '*' wildcard character, except # that the text matching the '=' in the first pattern is inserted in place # of any = wildcards in the second. # NOTE: the from-pattern need not have a wildcard if to-pattern does, # a default # # Restrictions: # Only the first '=' sign in from-pattern is used. Multiple = wildcards # in from-pattern match up with the first from-pattern =, ie: there is no # matching for multiple = signs. (I'm sure someone could make it work if # they wanted to... ?) # # EG: mved lib=.a =.a moves libhello.a to hello.a # mved =.o =.o.old moves fred.o to fred.o.old # mved '=.*' = moves fred.junk to fred # mved =.sh = moves mved.sh to mved # mved *.sh =. moves mved.sh to mved.sh. # # Original : Brian Coogan 06 Jan 1987 # Modified : Anthony Thyssen 25 Jun 1993 # PATH=/bin:/usr/bin export PATH myname=`basename $0` shopt=x cmd=mv case $# in 2|3) ;; *) cat - 1>&2 <&2 exit 1 ;; esac # catch mved = = case "$1$2" in ==) echo $myname: impossible 1>&2 exit 1 ;; esac globpatt=`echo $1 | sed 's/=/\*/'` frompatt=`echo "$1" | sed \ -e 's/\./\\\\./g' \ -e 's/\*/.*/g' \ -e 's/?/./g' \ -e 's/=/\\\\(\\.\\*\\\\)/' \ -e '/\\\\(/ !s/.*/\\\\(&\\\\)/' ` topatt=`echo "$2" | sed -e 's/=/\\\\1/g'` for n in $globpatt do # Check the pattern got expanded. (The file might also have vanished). if [ ! -f $n ] then echo $myname: no files matching $1 found 1>&2 exit 1 fi echo $n done | sed -n "s;$frompatt;$cmd & $topatt;p" | sh -$shopt