Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!rutgers!ucsd!ucsdhub!hp-sdd!ncr-sd!ncrlnk!uunet!mcvax!ukc!stl!stc!root44!gwc From: gwc@root.co.uk (Geoff Clare) Newsgroups: comp.unix.questions Subject: Re: simple question about mv Summary: Here's a useful script Keywords: mv, rename Message-ID: <684@root44.co.uk> Date: 2 Feb 89 11:30:02 GMT References: <18216@adm.BRL.MIL> Reply-To: gwc@root.co.uk (Geoff Clare) Organization: UniSoft Ltd, London, England Lines: 98 In article <18216@adm.BRL.MIL> DEG41560@ua1vm.ua.edu (Rob Smith) writes: > >What if I want to mv a bunch >of files with the same suffix to another suffix. The following does not >work > > mv *.flip *.flop > >what does? I'm under Ultrix 2.2. I'm doing it by hand, but I'd like to >be able to do wild card renames, ala DOS. > The following is a 'rename' script which I find very useful. It allows you to apply any 'sed' command to a list of files. To safeguard against duplicate new names it does not allow existing files to be overwritten (except if 'mv' will query them). It gives a running commentary as it renames each file. The job above becomes: rename 's/flip$/flop/' *.flip More examples: rename 's/abc/xyz/g' *abc* rename 's/abc\(.*\)def/uvw\1xyz/' * rename 'y/abc/ABC/' *[abc]* Enjoy, Geoff. # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. -----cut here-----cut here-----cut here-----cut here----- #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # rename # This archive created: Thu Feb 2 11:04:51 1989 echo shar: extracting rename '(897 characters)' sed 's/^X//' << \SHAR_EOF > rename X: X# rename.sh Geoff Clare Jan 1987 X X# Safely rename multiple files by applying a given 'sed' command X# to a list of file names X XUSAGE='Usage: rename sed_command file ...' X Xif test $# -lt 2 Xthen X echo >&2 "$USAGE" X exit 2 Xfi X X# Safeguards for existing files rely on 'mv' interactive behaviour Xif test ! -t 0 Xthen X echo >&2 "rename: must be used interactively" X exit 2 Xfi X X# Dup standard input to use in 'mv' command Xexec 3<&0 X XCMD="$1" Xshift X X# Let 'ls' spot non-existent files for us X# The first 'p' command prints the old name on a line before the new name X X/bin/ls -d "$@" | /bin/sed -e p -e "$CMD" | while read old Xdo X read new || new="$old" X X if test "X$old" = "X$new" X then X echo >&2 "$old: no change" X elif test -w "$new" # 'mv' will query non-writable files X then X echo >&2 "$old not renamed: $new already exists" X else X echo >&2 "$old --> $new" X /bin/mv 0<&3 "$old" "$new" X fi Xdone SHAR_EOF if test 897 -ne "`wc -c rename`" then echo shar: error transmitting rename '(should have been 897 characters)' fi # End of shell archive exit 0 -- Geoff Clare UniSoft Limited, Saunderson House, Hayne Street, London EC1A 9HH gwc@root.co.uk ...!mcvax!ukc!root44!gwc +44-1-606-7799 FAX: +44-1-726-2750