Batch renaming files in command line and Xargs

Cripto picture Cripto · Jun 10, 2012 · Viewed 36.8k times · Source

So, I have the following structure:

.
..
a.png
b.png 
c.png

I ran a command to resize them

ls | xargs -I xx convert xx -resize xx.jpg

Now my dir looks like this

.
..
a.png.jpg
a.png
b.png.jpg
b.png
c.png.jpg
c.png

The firs question is, how do i rename the file so that I can just have one extension. Not two. (basically, how do I clean up my original mistake)?

The second question is, in the future, using xargs, how do I change the extension of the file simular to second command?

Answer

Schleis picture Schleis · Oct 15, 2013

This can be also be done with xargs and sed to change the file extension.

ls | grep \.png$ | sed 'p;s/\.png/\.jpg/' | xargs -n2 mv

You can print the original filename along with what you want the filename to be. Then have xargs use those two arguments in the move command. For the one-liner, I also added a grep to filter out anything not a *.png file.