cara mengonversi file .xml secara massal ke dalam direktori ke UTF-8 sambil mempertahankan nama file yang sama

0

Saya memiliki banyak file .xml yang dikodekan dalam ISO-8859-1, dan saya ingin semuanya dalam UTF-8.

Saya menemukan kode untuk mengubahnya secara individual yaitu:

iconv -f ISO-8859-1 -t UTF-8 filename.xml > newfilename.xml

dan itu bekerja dengan baik.

Yang ingin saya ketahui adalah bagaimana menulis skrip shell untuk secara otomatis membersihkan semua file .xml dalam direktori dan kemudian mengganti file lama dengan file yang baru dikonversi, tetapi tetap menggunakan nama file yang sama.

Saya baru mengenal shell scripting, jadi bantuan akan sangat dihargai.

Tren
sumber
Ini tidak aman, karena itu akan menyalin deklarasi XML pada awal file tidak berubah. Deklarasi XML perlu diubah untuk mencerminkan pengkodean baru.
Michael Kay
Itu bisa dilakukan dengan menggunakan SED ... sed -i 's/olddec/newdec/g'Masukkan saja ke dalam for loop sebelum baris iconv
Fegnoid

Jawaban:

2

Anda dapat melakukan ini di baris perintah dalam bash shell

for i in *.xml; do
    iconv -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

ini pada dasarnya mengambil semua file xml, menempatkannya melalui Iconv ke filname.xml.1 dan kemudian memindahkan file itu kembali ke nama file asli

melihat ikonv dan lihat apa yang seharusnya (jika Anda menggunakan versi GNU)

for i in *.xml; do
    iconv -sc -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

opsi -s membungkam peringatan, dan opsi -c menghilangkan karakter yang tidak valid dari output.

Fegnoid
sumber
Hai Fegnoid, kodenya berfungsi tetapi sepertinya dijalankan hingga urutan karakter pertama yang salah, dan di sana setelah menghapus sisa baris, misalnya karakter pertama yang salah berada di baris 5000, diperbaiki, lalu dihapus semuanya setelah baris 5000. Garis-garisnya dekat dengan 35000 baris ... tahu mengapa melakukan itu?
Tren
yang mungkin lebih berkaitan dengan iconv ... yang harus saya akui saya tidak tahu banyak tentang
Fegnoid
@ Fegnoid: Coba pengodean ulang , ia memiliki -forceopsi. "Dengan opsi ini, rekod ireversibel atau yang salah dijalankan hingga selesai" . Ini juga dapat bekerja pada banyak file sekaligus.
RedGrittyBrick
Saya menambahkan opsi -sc pada jawaban saya, ini akan membuatnya berjalan sampai selesai
Fegnoid