Bash 命令';查找';,未能使用';{}';术后'&燃气轮机';在MacOSX中
我将把一些文件的编码从GBK转换成UTF-8 可以在Linux中运行以下命令:Bash 命令';查找';,未能使用';{}';术后'&燃气轮机';在MacOSX中,bash,find,iconv,Bash,Find,Iconv,我将把一些文件的编码从GBK转换成UTF-8 可以在Linux中运行以下命令: find Bnf -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \; 但是在MacOSX中,iconv没有带-o选项,所有的输出都到标准输出 因此,我将命令更改为: find Bnf -type f -exec iconv -f GBK -t UTF-8 {} > utf8/{} \; 但是最后一个“{}”没有被文件路径替换,而是保留为文本 也许我可以创
find Bnf -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;
但是在MacOSX中,iconv没有带-o选项,所有的输出都到标准输出
因此,我将命令更改为:
find Bnf -type f -exec iconv -f GBK -t UTF-8 {} > utf8/{} \;
但是最后一个“{}”没有被文件路径替换,而是保留为文本
也许我可以创建一个bash脚本来包装iconv和操作符'>',但是有更好的方法让它工作吗
谢谢。您最好将iconv运行到find之外。也许,您应该运行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
您的
正在被执行find
的shell解释。试着像\>
@Gabe那样逃离它,谢谢你告诉我这个窍门。这对我理解我的问题有很大帮助。不要在这里使用basename,此时您已经修改了原始的操作。@x-istence为什么<代码>查找输出“Bnf/foo”。然后重定向应该是“utf8/Bnf/foo”。find不调用mkdir()。因为basename“Bnf/foo”变为“foo”,所以它将存储在utf8/foo中,而在find示例中,它将存储在“utf8/Bnf/foo”中(不确定目录是如何创建的…)@x-istence您在上面是否确定?@mattn:您正在同一位置创建目录,需要在它前面加上utf8。