Это было в Linux, но должно работать в Mac OS.Возможно, вам придется проверить параметры команды find
, которые могут немного отличаться в Mac OS.Если вы не можете найти recode
для Mac, вы можете найти iconv
и настроить параметры.Я на самом деле просто использовал этот сумасшедший, не очень-единственный, файл с 2400+, из которых 1400+ были преобразованы:
find . -regextype posix-awk -iregex ".*\.(txt|htm|html|cgi|php|pl|pm)" | while read f; do t=`mktemp "$f.utf8.XXXXX"`; if [ ! "$?" = 0 ]; then echo "ERROR: cannot make temp file for $f"; continue; fi; echo recoding $f to $t; if cat "$f" | recode cp1252/..utf8/ >"$t" ; then if diff -wq "$f" "$t"; then echo No change: $f; rm "$t"; else mv "$f" "$f.cp1252" && mv "$t" "$f" && echo OK $f; fi; else echo "ERROR: $?"; fi; done | tee -a convert-results.txt
Вот то же самое в нескольких строках, чтобы сделать его немного более читабельным:
find . -regextype posix-awk -iregex ".*\.(txt|htm|html|cgi|php|pl|pm)" | \
while read f; do
t=`mktemp "$f.utf8.XXXXX"`
if [ ! "$?" = 0 ]; then
echo "ERROR: cannot make temp file for $f"
continue
fi
echo recoding $f to $t
if cat "$f" | recode cp1252/..utf8/ >"$t" ; then
if diff -wq "$f" "$t"; then
echo No change: $f
rm "$t"
else
mv "$f" "$f.cp1252" && mv "$t" "$f" && echo OK $f
fi
else
echo "ERROR: $?"
fi
done \
| tee -a convert-results.txt
Я использовал cp1252/..utf8/
, потому что у меня уже были окончания строк в LF и я хотел их сохранить.Возможно, вам придется адаптировать это к вашим файлам и прочитать справочную страницу перекодирования.Или, возможно, iconv также обрабатывает окончания строк?
Конечно, создайте резервную копию всего дерева каталогов перед выполнением любой такой команды!