如何编写bash shell脚本(在Mac下)来转换具有特殊字符的各种文件的名称?使用sed不起作用:
echo * | sed s/ü/ue/
我能用别的方法吗?
编辑
这是完整的剧本。它基本上压缩了iPhone应用程序包,然后(应该)转换zip文件名中的任何特殊字符:
#/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
编辑
明白了!!诀窍是通过iconv运行文件名来转换编码。我在做替换之前就这样做了,它起了作用:
zipfile=`echo ${zipfile} | iconv -f utf-8-mac -t utf-8`
发布于 2010-09-01 09:22:44
您可能需要使用sed /s/ü/ue/g
(注意g
,全局替换,所以它替换了所有的事件,而不仅仅是第一次出现)。
你想重命名文件吗?还是只需更改输出文件名的样子?
编辑
试试这个脚本:
#/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
)表示,那么会发生什么?另一条路呢?
https://stackoverflow.com/questions/3616514
复制相似问题