2012-02-16 22 views
5

我試試這個:如何更改許多文件中的編碼?

find . -exec iconv -f iso8859-2 -t utf-8 {} \; 

但輸出轉到屏幕,而不是同一個文件。怎麼做?

+0

看到http://stackoverflow.com/questions/4544669/batch-convert-latin-1-files-to-utf-8-using-iconv – 2012-02-16 11:40:56

+0

您還可以看到「貓文件「 我認爲你的文件問題不是編碼! 也許你的文件可以包含一些顏色代碼,所以你不能看到正常的文件..請嘗試「貓」命令,並再次寫入.. 正常或不正常? – 2012-02-16 11:41:46

回答

11

試試這個:

find . -type f -print -exec iconv -f iso8859-2 -t utf-8 -o {}.converted {} \; -exec mv {}.converted {} \; 

它將使用'.converted'後綴(擴展名)的臨時文件,然後將其移動到原始名稱,所以要小心如果你有'.converted'後綴的文件(我認爲你不hav E)。

而且這個劇本是不是包含空格的文件名安全的,所以更多的安全,你應該用雙引號:「{}」,而不是{}和「{} .converted」,而不是{} .converted

1

閱讀關於enconv
如果你需要轉換到當前的終端編碼,你可以做這樣的:

find . -exec enconv -L czech {}\; 

或者正是你想要的東西:

find . -exec enconv -L czech -x utf8 {}\; 
+0

爲什麼你不會一直以utf8的方式運行你的終端呢?讓它成爲交換的通用語。 – tchrist 2012-02-16 12:53:26

+0

我用utf8編碼運行我的終端 – 2r2w 2012-02-16 13:22:59

1

我發現這種方法適用於我,尤其是在我有多個文件編碼和多個文件擴展名的情況下。

創建一個vim腳本調用script.vim:

set bomb 
set fileencoding=utf-8 
wq 

然後運行你希望的文件擴展名的腳本目標:

find . -type f \(-iname "*.html" -o -iname "*.htm" -o -iname "*.php" -o -iname "*.css" -o -iname "*.less" -o -iname "*.js" \) -exec vim -S script.vim {} \; 
1

沒有人提出了一種自動檢測編碼和重新編碼。

下面是一個例子,用於重新編碼來自GIT主分支的UTF-8所有HTM/HTML文件。

git ls-tree master -r --name-only | grep htm | xargs -n1 -I{} bash -c 'recode "$(file -b --mime-encoding {})..utf-8" {}'