Понадобилось давеча конвертировать около 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 |
На работу скрипта уходит буквально пара секунд (:
А где тут рекурсия? О_о