Windowsユーザーから送られてきたファイルなどをmacで確認すると、濁音が2文字濁音として表示されて…困った経験はないですか?
僕はあります!笑
指定したフォルダのサブフォルダとファイル名を取得し二文字濁音を一文字濁音へ変換してcsvで出力する方法を紹介します!
まずはnkfをインストールしよう!
ターミナルで以下のコマンドを入力します。
$ brew install nkf
homebrewのインストールがまだな人は以下よりインストールしてください!
Homebrew
ここからはShellScript
#!/bin/bash
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
for i in "$@"
do
make_csv "$i"
done
解説
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
findコマンド
findコマンドで指定したフォルダのサブフォルダ、ファイルを取得し|
で標準入力としてnkf -wLu --ic=UTF8-MAC
へ渡します。
NFD→NFCへの変換
nkf -wLu --ic=UTF8-MAC
では、--ic=UTF8-MAC
で入力文字コードをNFD(UTF8-MAC)として受け取り、-w
でUTF8コード(NFC)として出力します。-Lu
改行コードを「LF」として出力するオプションです。
UTF8-MACについては以下を参考にしました!
UTF-8-MAC とは、Mac OS X に付属する iconv にて利用できる文字エンコードの一つで、 Normalization Form D (NFD) で符号化した UTF-8 のことを指します。 一般に UTF-8 とだけいった場合には、Normalization Form C (NFC) でエンコードされたものを意味します。
引用:UTF-8-MAC
つまり、-w
オプションはNormalization Form C (NFC)として出力することになります
ここでは、UTF-8(UTF-8-MAC(NFD))をUTF-8(NFC)へ変換したことになります。
csvファイルの作成
nkf -s > ${dir}.csv
では、Shift JISで出力した値を新たにcsvファイルで書き出すようにしています。Shift JISで書き出す意味あるの? と思うそこのあたな! nkf -wLu --ic=UTF8-MAC
の標準出力をcsvへ書き出してみて下さい……。
一応解説
for i in "$@"
do
make_csv "$i"
done
複数フォルダを指定した場合にも対応できるようにしています。
↓こんな感じ!
$ ./toNfcCsv.sh フォルダ1 フォルダ2
最後に
単純にテキストファイルとして出力したい場合は以下でokです
nkf -wLu --ic=UTF8-MAC > ${dir}.txt
Githubでコードアップしたので良かったら使ってみてください!
https://github.com/masanorifunaki/bash-toNfcCsv