Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch convert latin-1 files to utf-8 using iconv

I'm having this one PHP project on my OSX which is in latin1 -encoding. Now I need to convert files to UTF8. I'm not much a shell coder and I tried something I found from internet:

mkdir new   for a in `ls -R *`; do iconv -f iso-8859-1 -t utf-8 <"$a" >new/"$a" ; done 

But that does not create the directory structure and it gives me heck load of errors when run. Can anyone come up with neat solution?

like image 848
Jasmo Avatar asked Dec 28 '10 08:12

Jasmo


1 Answers

You shouldn't use ls like that and a for loop is not appropriate either. Also, the destination directory should be outside the source directory.

mkdir /path/to/destination find . -type f -exec iconv -f iso-8859-1 -t utf-8 "{}" -o /path/to/destination/"{}" \; 

No need for a loop. The -type f option includes files and excludes directories.

Edit:

The OS X version of iconv doesn't have the -o option. Try this:

find . -type f -exec bash -c 'iconv -f iso-8859-1 -t utf-8 "{}" > /path/to/destination/"{}"' \; 
like image 183
Dennis Williamson Avatar answered Oct 07 '22 13:10

Dennis Williamson