Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 04 Jan 2010 15:52:09 -0500
From:      nvidican@envieweb.net
To:        "=?utf-8?b?RMOhcmlv?= \"P." <fbsd.questions.list@gmail.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Rename pictures in the command-line interface
Message-ID:  <20100104155209.rxtj6y2vk0w8o0g8@www.envieweb.net>
In-Reply-To: <1262637277.12080.9.camel@dasp-laptop>
References:  <1262624558.9656.16.camel@dasp-laptop> <20100104145854.gdhdk5mb288oswgw@www.envieweb.net> <1262637277.12080.9.camel@dasp-laptop>

next in thread | previous in thread | raw e-mail | index | archive | help
No problem. You might also consider extending it to support '.jpeg' as =20
well as '.jpg', or even alter to work recursively through =20
sub-directories. Like I said though, it's more or less a starting =20
point. It will continue to extend beyond the current number each time =20
it's run too - so it should never over-write an existing file and =20
never need to be altered to support one more digit, (until system =20
limitations come in to play - but that's a whole other ball game in =20
terms of scale and probably the least of your worries at that point).

Personally I find things like this a LOT easier to do in Perl for the =20
power and simplicity of Perls ability to handle and manipulate =20
strings, (again like I'd mentioned in my original reply), I'm sure =20
this is do-able in a shell script too just seems simpler to =20
read/write/work with written in Perl to me and it just gets the job =20
done.

--
Nathan Vidican
nathan@vidican.com


Quoting "D=C3=A1rio \"P." <fbsd.questions.list@gmail.com>:

> Seg, 2010-01-04 =C3=A0s 14:58 -0500, nvidican@envieweb.net escreveu:
>
>> Dario,
>>
>> I'm not personally aware of any single commands which allow
>> substitution using a counter like you're asking, or of a decent way to
>> do what you're asking from the shell script either; however,
>> personally I'd write a simple Perl script to do it. The trick being to
>> be able to find the bsd###.jpg where it left off at in a directory so
>> you don't overwrite existing files if repeatability is important.
>>
>> Here's something quick/dirty to work with, you can build from here,
>> but try copy/pasting the following code into a new Perl script and run
>> it from withing the directory you want to work:
>>
>> #!/usr/bin/perl -w
>>
>>
>> use strict;
>>
>> my @files =3D `ls`; # gets a list of all files in the current dir
>> # start a counter at zero, then increment it below:
>> my $cntr=3D0;
>> # set counter to the largest bsd###.jpg file in this directory:
>> map { if (/^bsd(\d+)\.jpg/) { $cntr =3D $1 if($1>$cntr); } }
>> grep(/bsd\d+\.jpg/,@files);
>>
>> print "Left off last time at $cntr, going to start this time at
>> ",++$cntr,".\n";
>>
>> foreach (@files) {
>>          chomp();
>>          # skip all files which are already named bsd###.jpg
>>          # or are not in ending .jpg
>>          next if ($_ =3D~ /bsd\d+\.jpg/ || $_ !~ /(\.jpg)$/i);
>>
>>          my $new =3D $_;
>>          # use a regular expression to substitute the name
>>          # (note /i =3D=3D case insensative so it will match '.JPG' as we=
ll)
>>          $new =3D~ s/^(.+)\.jpg$/bsd$cntr\.jpg/i;
>>
>>          print "Renaming $_ to $new\n";
>>          # un-comment the line below to actually do the rename:
>>          # rename($_,$new);
>>          $cntr++;
>> }
>>
>> ### END OF SCRIPT ###
>>
>> An example given a directory with files like:
>>
>> blah.Jpg
>> bs432.jpg
>> bsd11.jpg
>> bsl.jpg
>> uh-oh.jpG
>> yourSelf.JPG
>>
>> Will give you an output like:
>>
>> Left off last time at 11, going to start this time at 12.
>> Renaming blah.Jpg to bsd12.jpg
>> Renaming bs432.jpg to bsd13.jpg
>> Renaming bsl.jpg to bsd14.jpg
>> Renaming uh-oh.jpG to bsd15.jpg
>> Renaming youSelf.JPG to bsd16.jpg
>>
>>
>> My $0.02 ... like anything, sure you could do this 100 different other
>> ways, and sure it's not going to be really efficient for large
>> volumes, but in a pinch it'll work pretty reliably.
>>
>> --
>> Nathan Vidican
>> nathan@vidican.com
>>
>>
>
> Worked just the way I wanted! :)
> Thank you so much for the time you spent doing this Perl script.
>
>






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100104155209.rxtj6y2vk0w8o0g8>