Rename pictures in the command-line interface

Polytropon freebsd at edvax.de
Mon Jan 4 18:16:18 UTC 2010


On Mon, 04 Jan 2010 18:02:38 +0100, Dário "P." <fbsd.questions.list at gmail.com> wrote:
> Hello,
> 
> I have one directory with some pictures that I wanna rename (I use csh,
> don't know if that matters).
> 
> For exemple, I have:
> 
> b.jpg
> bs.jpg
> bsd.jpg
> 
> And I wanna change to:
> 
> bsd1.jpg
> bsd2.jpg
> bsd3.jpg
> 
> I really appreciate if someone can help me. :)

I know it's quite ugly and complicatedly written, but maybe
the attached script will help. It "just works", but the more
I look at it, the more I wish I hadn't written it, or just
used sh and its printf %03d mechanism. :-)

Keep in mind that the script follows the csh's sorting
order to resolve *, which usually is lexicographical
order.

For example

	97.jpg
	98.jpg
	99.jpg
	100.jpg

will, after issuing

	renumber bla jpg

result in

	bla_01.jpg = 100.jpg
	bla_02.jpg = 97.jpg
	bla_03.jpg = 98.jpg
	bla_04.jpg = 99.jpg

So if you wish to do some file preparation, know that the
powerful Midnight Commander can do this for you (select and
PF6).

Here's the script now. Put it in ~/bin (and add this directory
to your $PATH) as "renumber" (or any name you like), give it +x
permissions and "rehash" to make it available to the C shell.
Then, use "renumber <prefix> <suffix>". It will process ALL
files in the current directory (as I said: ugly as sin).


#!/bin/csh
if ( $1 == "" || $2 == "" ) then
	echo "Usage: renumber <base> <extension>"
	echo "       Target form: <base>_nn[n].<extension>"
	echo "       For 1 to 99 files: nn; for more than 99 files: nnn"
	exit 1
endif

set n = `ls -l | wc | awk '{print $1}'`
set num = `expr $n - 1`
echo "${num} files to handle."

set base = $1
set extn = $2
set n = 0
foreach f ( *.${extn} )
	set n = `expr $n + 1`
	if ( ${num} > 99 ) then
		if ( ${%n} == 1 ) then
			mv "${f}" "${base}_00${n}.${extn}"
		else if ( ${%n} == 2 ) then
			mv "${f}" "${base}_0${n}.${extn}"
		else
			mv "${f}" "${base}_${n}.${extn}"
		endif
	else
		if ( ${%n} == 1 ) then
			mv "${f}" "${base}_0${n}.${extn}"
		else
			mv "${f}" "${base}_${n}.${extn}"
		endif
	endif
end


-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...


More information about the freebsd-questions mailing list