命令'find',在'>'之后未能使用'{}'在Mac OS X中

时间:2011-06-22 04:19:23

标签: bash find iconv

我要将一些文件的编码从GBK转换为UTF-8。

可以在Linux中运行以下命令:

find Bnf -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;

但是在Mac OS X中,iconv没有-o选项,所有输出都转到stdout。

所以,我把命令改为:

find Bnf -type f -exec iconv -f GBK -t UTF-8 {} > utf8/{} \;

但是最后一个'{}'并没有被文件路径取代,而是留下了文字。

也许我可以创建一个bash脚本来包装iconv和运算符'>',但有没有更好的方法让它工作?

感谢。

1 个答案:

答案 0 :(得分:2)

你最好在find的外面运行iconv。也许,你应该运行basename。

find Bnf -type f |\
while read line; do
  FILE=`basename $line`
  iconv -f GBK -t UTF-8 $line > utf8/$FILE
done

如果你想保留目录结构

find Bnf -type f |\
while read line; do
  mkdir -p utf8/`dirname $line` 2> /dev/null
  iconv -f GBK -t UTF-8 $line > utf8/$line
done