[kwlug-disc] bash - file renaming

Doug Moen doug at moens.org
Thu Sep 26 09:19:03 EDT 2019


A good thing about for loops is that they work with commands other than 'mv', eg you want to copy the files, or symlink them, or `git mv` them.

On Thu, Sep 26, 2019, at 12:02 PM, Cedric Puddy wrote:
> I've always done as Jason suggests, but the one thing that is usually helpful is the addition of "basename":
> 
>> for $FILE in *
>> do
>> mv $FILE $(basename $FILE .htm).whatever
>> done
> 
> Basename will remove an arbitrary string (eg: .htm) from the end of another string, thus getting rid of the old extension, so you can tack on your new ".html" or ".whatever" extension.
> 
> The fact that this covers most use cases is why there is no utility, I suspect. When I was first getting started, a grey beard showed me loops - I think for this exact reason, actually.
> 
> Also, there would be no need for multiple "*" wildcards, I expect, since every "*.htm" is going to get the new target extension, so why not have the syntax for the rename utility be "rename *.oldext .newext"?
> 
>  Warm Regards,
>  -Cedric
> 
> [*CCj*] [Cedric Puddy, President, CCj/Clearline Inc.. T: 519-342-4004x102 <tel:519-342-4004;102>]
> 
> On Sep 26, 2019, at 13:04, Jason Eckert <jason.eckert at gmail.com> wrote:
>> Why not write a simple for loop in bash?
>> for $FILE in *
>> do
>> mv $FILE $FILE.whatever
>> done
>> 
>> On Thu, Sep 26, 2019 at 4:23 AM Ronald Barnes <ron at ronaldbarnes.ca> wrote:
>>> 
>>> Hi everyone,
>>> 
>>>  As you probably already know, Gnu/Linux distributions do not come with a 
>>>  rename utility similar to what some of us "grew up on" in DOS and/or OS/2.
>>> 
>>>  The "mv" (move) command is to be used instead. But it doesn't handle 
>>>  things like "mv *.htm *.html".
>>> 
>>>  So, I decided to tackle writing one.
>>> 
>>> 
>>>  Since bash has "Pathname Expansion", which expands a parameter like 
>>>  "*.htm" into a list of files that match that expression, it was a bit 
>>>  more challenging than I expected.
>>> 
>>> 
>>>  However, I think I have something that handles wildcards sufficiently well.
>>> 
>>>  > https://github.com/RonaldBarnes/bash-rename
>>> 
>>> 
>>>  If anyone is interested in having a look, and providing feedback, it 
>>>  would be welcome.
>>> 
>>> 
>>>  There is a "rename.sh" which does the parameter parsing (although once 
>>>  it parses the parameters, "mv" does the actual work), and a 
>>>  "rename.unit-tests.sh" which is - so far - just notes to myself on edge 
>>>  cases.
>>> 
>>> 
>>> 
>>>  I'm pretty sure this utility can be of some use to a significant number 
>>>  of people and hopefully someone on this list will agree.
>>> 
>>> 
>>>  Note, there's a "no-op" aka "dry-run" option of -n that will prevent any 
>>>  files from being touched / moved / renamed, and a -vvv option to spew 
>>>  out debugging info to help determine how the script derives the target 
>>>  file name from the wildcards provided.
>>> 
>>> 
>>> 
>>>  Thanks!
>>> 
>>>  rb
>>> 
>>>  _______________________________________________
>>>  kwlug-disc mailing list
>>> kwlug-disc at kwlug.org
>>> http://kwlug.org/mailman/listinfo/kwlug-disc_kwlug.org
>> _______________________________________________
>> kwlug-disc mailing list
>> kwlug-disc at kwlug.org
>> http://kwlug.org/mailman/listinfo/kwlug-disc_kwlug.org
> _______________________________________________
> kwlug-disc mailing list
> kwlug-disc at kwlug.org
> http://kwlug.org/mailman/listinfo/kwlug-disc_kwlug.org
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://kwlug.org/pipermail/kwlug-disc_kwlug.org/attachments/20190926/eb508bff/attachment.htm>


More information about the kwlug-disc mailing list