Понадобилось давеча конвертировать около 2000 файлов исходников на java из ANSI в UTF8, при этом дописать в начало каждого файла строку на русском для корректного определения этого самого UTF8 🙂
Получился следующий sh скриптик:
| find . -iname "*.java" -exec sh -c 'iconv -f cp1252 -t utf-8 {} > {}.utf8' \; for i in `(find . -name "*.utf8")`; do mv $i ${i/.utf8/}; done for j in `(find . -name "*.java")`; do echo /*текст на русском*/ | cat - $j > $j.russ; done for k in `(find . -name "*.russ")`; do mv $k ${k/.russ/}; done | 
Что и как происходит:
находим все файлы *.java, конвертируем их в UTF8 и записываем результат в *java.utf8
| find . -iname "*.java" -exec sh -c 'iconv -f cp1252 -t utf-8 {} > {}.utf8' \; | 
переименовываем результат обратно в *.java с заменой оригиналов
| for i in `(find . -name "*.utf8")`; do mv $i ${i/.utf8/}; done | 
записываем в начало нового файла строку и вставляем после нее содержимое оригинального файла, сохраняем как *.russ
| for j in `(find . -name "*.java")`; do echo /*текст на русском*/ | cat - $j > $j.russ; done | 
переименовываем результат в *.java с заменой оригиналов
| for k in `(find . -name "*.russ")`; do mv $k ${k/.russ/}; done | 
На работу скрипта уходит буквально пара секунд (:
 
								 
								 
								 
								 
								
А где тут рекурсия? О_о