rename v mv function conflict

mascarasnake yellowdog-general@lists.terrasoftsolutions.com
Wed, 15 Sep 2004 10:33:26 -0400


I join Derick in thanks for that. I use 'mv' as a general rule and the 
'rename' man page was fuzzy at best. Your explanation clarifies the 
'rename' man page and actually shows it to be a powerful tool. Now off 
to see if I can find it for my OS X box.

Geert Janssens wrote:

> Derick Centeno wrote:
> 
>> Hi Gang:
>> Has anyone else noticed a logical conflict between the rename and mv
>> functions?  Correcting this problem may be way beyond the scope of this
>> list but I was wondering if any of the luminaries here came up with a
>> solution to correct both of them.
>>
>> For instance, although man and info regarding rename report the same
>> instructions.  When it is applied rename behaves as though it has
>> succeeded in its execution, when in fact it has failed!
>>
>> mv has the capacity to rename anything but not only are they no
>> directions within man or info how to begin such a procedure -- no one
>> apparently has noticed the logical conflict of having one function do
>> the job of another.  In short, mv is working outside of its functional
>> scope; it may have been built that way but unlike the leaning Tower of
>> Pisa there is no value in this conflicting feature which properly should
>> be the function of rename.
>>
> You have just discovered the prime rule for linux computing:
> "For every problem, there is at least one solution, but most likely 
> more" :-)
> 
> I can understand your confusion because of the names, but rename and mv 
> are designed with different goals in mind.
> 
> rename is designed to rename a large group of similarly named files, 
> while mv is a general purpose move/rename command.
> 
> For some actions, you can use either, because there is quite some 
> overlap in what they can do. I'll give you some examples.
> 
> If you only want to partly rename one single file, you can use either 
> command. For example to rename "kermit.frog" to "hermit.frog" you could use
> rename k h kermit.frog
> or
> mv kermit.frog hermit.frog
> 
> If you want to completely rename one single file, you could still use 
> either command, but rename obviously gets less interesting, especially 
> if the old name is a rather long name. Take for example the rename of 
> "a_very_very_very_long.one" to "short.name":
> 
> rename a_very_very_very_long.one short.name a_very_very_very_long.one
> mv a_very_very_very_long.one short.name
> 
> You can start to see the pattern already:
> 
> rename takes at least three parameters:
> 1. the part of the filename you want to replace
> 2. what you would want to replace it with
> 3. the file that should be renamed
> 
> mv takes two parameters for a rename:
> 1. the old filename
> 2. the new filename
> 
> Depending on what you want to do, one or the other command is more 
> convenient.
> 
> And by the way, it doesn't matter if you are renaming files or 
> directories. It works with either:
> 
> mv old.directory new.directory
> does the same as
> rename old new old.directory
> 
> You start to think I'm a good magician already ?
> Then let's make things more confusing ;-) :
> Your reasoning is:
> rename's job should be renaming files, mv's job should be moving files 
> around.
> 
> As you correctly noticed, mv can also rename files. I'll show you now, 
> that 'rename' can also move files !
> 
> Suppose you have a file jolly.jumper in directory /home/farm/stable, and 
> you want to move it to directory /home/farm/meadow. This can be done by 
> either
> cd /home/farm
> mv stable/jolly.jumper meadow
> 
> or
> cd /home/farm
> rename stable meadow stable/jolly.jumper
> 
> Note that neither command renames directory stable to meadow, but both 
> actually move the file from one directory to the other !
> 
> Now that's magic, isn't it ? ;-)
> 
> Ok, I'll tell you my secret then.
> 
> To understand how all of this works, you should look at filenames as 
> starting from the root directory, so in the above example jolly.jumper's 
> real filename is actually /home/farm/stable/jolly.jumper.
> 
> So to move this file to another directory is actually the same a 
> renaming it, only this time it's not the last part that is changed, but 
> the part just before the last '/'.
> 
> There is only one limitation to this: you must move to an existing 
> directory. This is done to prevent that with a simple typo a file gets 
> moved into an unknown directory. Chances are you wouldn't find your file 
> anymore afterwards.
> 
> Remember: all of the above only shows the actions you can perform with 
> either command. However, although you can use both commands, depending 
> on the action, one or the other is simpler to use, because they use 
> other parameters.
> 
> 
> Apart from that, they both have actions the other command can't perform.
> 
> Some examples:
> Renaming many similarly named files is only possible with rename, or a 
> home-brewn shell script using mv.
> For example a whole directory containing several files ending in .html 
> should be renamed to files ending in .htm (this kind of conversions 
> could happen when working in a mixed linux-windows environment for 
> example):
> rename .html .htm <directory>/*.html
> 
> mv has quite a lot of finetuning options in case the destination file 
> already exists: you could tune it to make a backup of the old 
> destination file:
> mv -b old.name new.name
> this will first rename the file new.name to new.name~ if it already 
> exists, and then rename old.name to new.name.
> 
> You could also have mv ask wether or not to overwrite files:
> mv -i old.name new.name
> 
> Or you could have mv only overwrite the file if the source filename is 
> newer:
> mv -u old.name new.name
> 
> 
> Hopefully this helps explaining things a bit.
> 
> Cheers,
> 
> Geert
> _______________________________________________
> yellowdog-general mailing list
> yellowdog-general@lists.terrasoftsolutions.com
> http://lists.terrasoftsolutions.com/mailman/listinfo/yellowdog-general
> HINT: to Google archives, try  '<keywords> site:terrasoftsolutions.com'
> 

-- 
     It's what you make it man
     Takes time
     A little bit
     A little bit more

             -The Minutemen

dontdrill@earthlink.net