[NTLUG:Discuss] "find -exec" -vs xargs -OR- subshells in -exec

Fred James fredjame at fredjame.cnc.net
Fri May 26 09:48:47 CDT 2006


Richard Geoffrion wrote:

>I'm trying to rename a bunch of mangled files.  I want to replace all of 
>the tilde (~) characters with dashes (-).
>
>Find can find the files, but I can't figure out how to rename the file 
>once I have it on the command line.
>(and for the purposes of this issue...on this particular machine,  I 
>don't have the rename command ---- even though I tried using rename on 
>another machine with no luck.)
>(I hate it when machines have no luck)
>
>rtcg at bobpc:/tmp# mkdir test
>rtcg at bobpc:/tmp# cd test
>rtcg at bobpc:/tmp/test# ls
>rtcg at bobpc:/tmp/test# touch 1~1.jpg
>rtcg at bobpc:/tmp/test# find . -name *~*
>./1~1.jpg
>rtcg at bobpc:/tmp/test# find . -name *~* -exec mv {} `echo {} | sed y#~#-#` \;
>mv: `./1~1.jpg' and `./1~1.jpg' are the same file
>rtcg at bobpc:/tmp/test# TESTFILE=1~1.jpg
>rtcg at bobpc:/tmp/test# mv $TESTFILE `echo $TESTFILE | sed y#~#-#`
>rtcg at bobpc:/tmp/test# ls
>1-1.jpg
>rtcg at bobpc:/tmp/test#
>
>
>I've looked at xargs, but xargs just wants to run a command on the 
>results.  I can't find how to manipulate the ??stout/stin'? that was 
>passed to xargs.
>
>
>Suggestions?
>
>  
>
Richard Geoffrion
Would something like this help?
Regards
Fred James

#! /bin/sh
#
for oldname in `ls -1 *~*`
do
        newname=`echo $oldname | sed y#~#-#`
        mv $oldname $newname
done
exit





More information about the Discuss mailing list