How do I change extensions of all files in a folder to one common extension when all the files have different extensions?

I have a grader for COCI (a competitive programming contest) that reads input files (txt[number].in), compiles and runs a code (txt.cpp) and matches the result with an output file (txt[number].out). The problem is, COCI problem's input files have format (txt.in.1), (txt.in.2), (txt.in.3) etc and similar names for output files.

I need to change the extensions of the input files from txt.in.[number] to txt[number].in. (Need to do the same for the output files as well)

Can anyone help me with this?

I'm currently using 13.04 Ubuntu.


Using the terminal, I think this is the easiest way:

mmv -v "*.in.*" "#1#2.in"

Here is a test:

$ ls
txt.in.1  txt.in.2  txt.in.3
$ mmv -v "*.in.*" "#1#2.in"
txt.in.1 -> txt1.in : done
txt.in.2 -> txt2.in : done
txt.in.3 -> txt3.in : done
$ ls
txt1.in  txt2.in  txt3.in

By default, mmv is not installed in Ubuntu, but you can install it from terminal using the following command:

sudo apt-get install mmv

See man mmv for more info.


If it is okay that a file.in.1 becomes file.in.1.in, then this will do

rename 's/$/.in/' *

If you think the two in's are ugly, then do

rename 's/\.in(\.\d+)$/$1.in/' *

Pass the -n option to perform a dry run.