homepage Welcome to WebmasterWorld Guest from
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member

Home / Forums Index / Hardware and OS Related Technologies / Linux, Unix, and *nix like Operating Systems
Forum Library, Charter, Moderators: bakedjake

Linux, Unix, and *nix like Operating Systems Forum

How can I change file extensions recursively?

 10:13 am on May 25, 2009 (gmt 0)

I will give a little background on this I have setup a few processes to manage some source code I have written.

Basically I do the php dev in windows and I am wanting to automate some of the tedious tasks I have to do when putting out a new release.
I am no shell script guru and what I have working currently is many hours of hunting the net for solutions.

first of I sync the files and set the perms to 664

find . -type f -name "*.*" -exec chmod 664 {} \;

then I make sure all the newlines are set to unix

find . -type f -name "*.*" -exec dos2unix -o {} \;

At that point I make sure all of the files have the correct charset for UTF-8 excluding any image files and one ttf font that gets distributed

find . -type f \( ! -iname "*.ttf" ! -iname "*.gif" ! -iname "*.jpg" ! -iname "*.jpeg" ! -iname "*.png" \) -exec iconv -f ISO-8859-1 -t UTF-8 -o {}.utf8 {} \;

I could actually use a little help with that one since I think it could be made a little more readable?

then the last thing at this stage before an automated diff patch
is to rename all of the .utf8 files that have been created by dropping the .utf8 extension and using the previous extension for that file so .php.utf8 becomes .php again

this works but does not recurse into the directory structure so the files in the current directory are moved just fine but anything in a directory doesn't get touched.

for x in *.utf8; do mv $x `basename $x .utf8`; done;

Any help is appreciated.

Best Regards,



 12:41 am on May 26, 2009 (gmt 0)

I got it worked out took some digging around but here is what I came up with I found out about using mmv.



# move into our working directory
cd /var/www/localhost/htdocs/dist/

# change the execute permissions from windows on our files
find . -type f -name "*.*" -exec chmod 664 {} \;
echo "Files have been modified to remove the execute bit"

# if line endings in our file are windows CR change to unix
find . -type f -name "*.*" -exec dos2unix -q -o {} \;
echo "Dos 2 Unix new line conversion has completed"

# delete any previous utf-8 files so we can write new ones
find . -type f \( -iname "*utf8*" \) -exec rm -f {} \;
echo "Old UTF-8 files have been deleted"

# get all files in our current working directory and make sure they are UTF-8 charset
find . -type f \( ! -iname "*.ttf" ! -iname "*.gif" ! -iname "*.jpg" ! -iname "*.jpeg" ! -iname "*.png" \) -exec iconv -f $CONVERT_FROM -t $CONVERT_TO -s -o {}$
echo "New UTF-8 files have been created"

# delete unconverted files so we can move the new files back later
find . -type f \( ! -iname "*.utf8" ! -iname "*.ttf" ! -iname "*.gif" ! -iname "*.jpg" ! -iname "*.jpeg" ! -iname "*.png" \) -exec rm {} \;
echo "Removal of original unconverted files is complete"

# rename all files converted to utf-8 with utf8 extension
mmv -m ";*.utf8" "#1#2"
# deal with .htaccess
mmv -m ";.*.utf8" "#1.#2"
echo "Dist Prep has completed"

I could still use a little help optimizing it if anyone feels like it.
Best Regards,


 2:41 am on May 26, 2009 (gmt 0)

be careful the one line is wrong and will wipe out everything if you aren't careful replace it with this code

find . -type f \( ! -iname "*.ttf" ! -iname "*.gif" ! -iname "*.jpg" ! -iname "*.jpeg" ! -iname "*.png" \) -exec iconv -f $CONVERT_FROM -t $CONVERT_TO -s -o {}.utf8 {} \;

it is missing the final .utf8 {} \;

Global Options:
 top home search open messages active posts  

Home / Forums Index / Hardware and OS Related Technologies / Linux, Unix, and *nix like Operating Systems
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved