Как написать сценарий оболочки bash (в Mac OS X) для преобразования имен различных файлов со специальными символами, такими как ä, ö, ü? Использование sed не работает:Преобразование специальных символов в скрипт оболочки bash
echo * | sed s/ü/ue/
Могу ли я сделать это по-другому?
EDIT
Вот полный скрипт. Это в основном застегивает пакеты iPhone приложение, а затем (должны) конвертировать любые специальные символы в имени почтового индекса файла:
#/bin/bash
for appfile in *.app
do
zipfile=`echo ${appfile} | sed s/app/zip/`
zipfile=`echo ${zipfile} | sed s/\ /_/`
# these don't work...
zipfile=`echo ${zipfile} | sed s/ä/ae/`
zipfile=`echo ${zipfile} | sed s/ö/oe/`
zipfile=`echo ${zipfile} | sed s/ü/ue/`
zipfile=`echo ${zipfile} | sed s/ß/ss/`
# make zip
zip -ruy0 "${zipfile}" "${appfile}"
done
EDIT
Понял !! Хитрость заключается в том, чтобы запустить имя файла через iconv для преобразования кодировки. Я сделал это, прежде чем делать замены äöü, и она работала:
zipfile=`echo ${zipfile} | iconv -f utf-8-mac -t utf-8`
Нерест 'sed' несколько раз в петле может быть дорогим. Вы можете комбинировать свои подстановки: 'sed 's/ä/ae/g; S/O/ае /; ... ''. Кроме того, Bash может сделать это следующим образом: 'zipfile = $ {zipfile // ä/ae /}' (но они должны выполняться индивидуально). –
Спасибо за советы, хотя в этом случае производительность на самом деле не проблема. Но все равно хорошо знать. – ian