2011-06-22 29 views
0

我將把一些文件的編碼從GBK轉換爲UTF-8。命令'find',未能在Mac OS X操作符'>'後面使用'{}'

它是確定在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

你'>'是越來越由shell執行解釋'find'。嘗試像'\>'一樣轉義它。 – Gabe

+0

@加貝,謝謝你告訴我那個伎倆。它能幫助我理解我的問題。 – Logan

回答

2

你最好在iconv外面找find。也許,你應該運行基本名稱。

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 
+0

不要在那裏做基地名稱,那時你已經修改了原來的名字。 –

+0

@ x-istence爲什麼? 'find'輸出「Bnf/foo」。那麼重定向應該是「utf8/Bnf/foo」。 find不會調用mkdir()。 – mattn

+0

由於basename「Bnf/foo」變成了「foo」,因此它會將其存儲在utf8/foo中,而在查找示例中它將存儲爲「utf8/Bnf/foo」(不知道如何創建目錄... ) –