Возможно, вам нужно использовать sed /s/ü/ue/g
(обратите внимание на g
, global replace, поэтому он заменяет все вхождения, а не только первое вхождение).
Вы пытаетесь переименовать файлы? Или просто изменить то, как выглядит имя файла для вывода?
EDIT
Попробуйте этот скрипт:
#/bin/bash
for appfile in *.app
do
zipfile=`echo ${appfile} | sed s/app$/zip/`
zipfile=`echo ${zipfile} | sed s/\ /_/g`
# these don't work...
zipfile=`echo ${zipfile} | sed s/ä/ae/g`
zipfile=`echo ${zipfile} | sed s/ö/oe/g`
zipfile=`echo ${zipfile} | sed s/ü/ue/g`
zipfile=`echo ${zipfile} | sed s/ß/ss/g`
# make zip
echo zip -ruy0 "${zipfile}" "${appfile}"
done
Когда я запускаю его с двумя простыми именами файлов, он выдает мне следующий вывод:
$ ./foo.sh
zip -ruy0 ae_oeoe_ue_ss.zip ä öö ü ß.app
zip -ruy0 ueueueueue.zip üüüüü.app
Файлы имеют имена ä öö ü ß.app
и üüüüü.app
.
Я только что поместил g
в конце всех sed
команд и закрепил app
. (Что будет хорошо, если у вас есть имя с именем appliance.app
или deliciousapple.app
.) echo
в конце удобно для тестирования. :)
Есть кое-что, чего я не понимаю: если ваши имена файлов содержат специальные символы в локали iso-8859-1 (байт 0xDF
для ß), а ваши командные строки в UTF-8 (байты 0xC3 0x9F
), что просходит? Как насчет обратного?