2012-02-16 19 views
5

próbuję to:Jak zmienić kodowanie w wielu plikach?

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

ale wyjście idzie na ekranie, a nie do tego samego pliku. Jak to zrobić?

+0

zobaczyć http://stackoverflow.com/questions/4544669/batch-convert-latin-1-files-to-utf-8-using-iconv –

+0

Można również zobaczyć plik „kota " Myślę, że twój problem z plikami nie koduje! Może twój plik może zawierać niektóre kody kolorów, więc nie możesz zobaczyć normalnego pliku. Spróbuj wpisać "cat" i napisz jeszcze raz. normalnie czy nie? –

Odpowiedz

11

Spróbuj tego:

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

It użyje pliku tymczasowego z rozszerzeniem ".converted", a następnie przeniesie go do oryginalnej nazwy, więc zachowaj ostrożność, jeśli posiadasz pliki z końcówkami ".converted" (nie sądzę, że hav mi).

Również ten skrypt nie jest bezpieczne dla nazw zawierających spacje, więc dla większego bezpieczeństwa zalecana cudzysłów: „{}” zamiast {} i „{} .converted” zamiast {} .converted

1

przeczytać o enconv.
Jeśli trzeba konwertować do bieżącego kodowania terminala można to zrobić tak:

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

Albo dokładnie to, czego chciał:

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

Dlaczego i tak nie uruchomiłbyś terminalu w utf8? Niech to będzie lingua franca wymiany. – tchrist

+0

Uruchomiłem mój terminal w kodowaniu utf8 – 2r2w

1

Zauważyłem, że ta metoda działa dobrze dla mnie, szczególnie tam, gdzie miałem wiele kodowań plików i wiele rozszerzeń plików.

utworzyć skrypt vim nazwie script.vim:

set bomb 
set fileencoding=utf-8 
wq 

następnie uruchomić skrypt na rozszerzeń plików, które chcesz kierować:

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

Nikt nie zaproponował sposób, aby automatycznie wykryć i kodowanie recode.

Oto przykład przekodowania do UTF-8 wszystkich plików HTM/HTML z głównego oddziału GIT.

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

Powiązane problemy