ディレクトリの文字コードを表示する

コマンドラインだけでディレクトリにあるファイルの文字コードを表示する方法です。

そのコマンドは

find -name '*.tex' -print0 | xarg -0 nkf -g

これだけです。

0711

この流れを簡単に説明すると、「find」コマンドではtexという拡張子を探してこれを「|」の右側に渡します。
パイプに渡すと言ったりしますね。

で、xargxコマンドは標準入力の代わりにパイプから引き数を受け取って、それをさらにnkfコマンドの引き数として展開する、
という仕組みです(今さら説明する仕組みでもないかもしれませんが)。

ちなみに、’*.tex’はたまたま拡張子texのファイルを探しただけなので、それ以上の意味はありません。

「-print0」はprint0を使うというオプションです。このオプションは何かというと、
「find -name ‘*.tex’」だけだとファイル名に空白があった場合、たとえば「aa bb.tex」というファイル名だったら
“aa” “bb.tex”という2つの文字列がパイプに渡されて、xargsは2つの文字列が渡されたとして判断されてしまいます。

文字列の最後の指標は通常は「\0」なのですが、このオプションを使うとprint0は、「\0」を別のものに置き換えるらしいです
(何に置き換えるのか調べてませんが)。

それを受けるxarg側も「-0」オプションを指定することによって、文字列の終わりを「\0」以外で判断するので、結果として「aa bb.tex」を一塊の文字列として判断することができます。

でもって、その引き数を文字コード変換コマンドnkfに渡します。nkfの「-g」オプションはguess(推測)の意味です。nkfに渡されたファイルの文字コードをnkfが推測して出力してくれる、というわけです。

もしかしたら、もっと便利なアプリもあるのかもしれないので、もしかすると「レガシーコマンド」なのかもしれませんけどね。

コメント