文字コードがEUCで指定されているLinux上に文字コードShift-JISで作成された、PDFとCSVファイルがあります。
このファイル名をシェルで判断して条件に一致した場合のみ削除したいのですが、文字コードが違うためファイル名が読み込めません。
シェル内で読み取ったファイル名をShift-JISからEUCに変換して、該当の場合削除する。
としたいのですが、できなさそうです。
また、PDFをEUCに変換するとファイルが壊れてしまいます。
何かよい解決策はありませんでしょうか。
nkf を使えば文字コードの変換は出来ます。
http://cns-guide.sfc.keio.ac.jp/2004/2/4/12.html
$ nkf -S -e < INPUT.sjis.txt > OUTPUT.euc.txt
という使い方です。
正直前提条件がよく分からないのであまり自信がありませんが、
NKFはファイルの内容の文字コードを変換してくれますがファイル名を変更するのは難しそうです。
状況によっては使えます。
OLDFILENAME='aaaa' NEWFILENAME="`echo $OLDFILENAME | nkf -S -e`" mv OLDFINENAME NEWFILENAME
Shell にも依存するので確実ではないですが。
「ファイル名の変更」だけならそのものずばり convmv というコマンドもあります。
うわ。ありがとうございます!convmv試してみます!
http://www.ie.u-ryukyu.ac.jp/~kono/nkf/
主さんは「ファイル名」の文字コードを言っていて、
1さんは「ファイルの内容」の文字コードを言っているので、
主さんはnkfでは難しいと思ったんだと想像します。
2さんもそれを指摘してますが、主さんに伝わっていない気がします。
たとえば、ls -1 などすると、文字化けして見えるファイル名一覧も、
ls -1 | nkf -e
とすると、正しいファイル名を見ることができます。
NKFはファイルの内容の文字コードを変換してくれますがファイル名を変更するのは難しそうです。
追記としては、PERLかPHPでモジュールを作って実行させようかと考えています。