コマンドラインだけでディレクトリにあるファイルの文字コードを表示する方法です。
そのコマンドは
find -name '*.tex' -print0 | xarg -0 nkf -g
これだけです。
この流れを簡単に説明すると、「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が推測して出力してくれる、というわけです。
もしかしたら、もっと便利なアプリもあるのかもしれないので、もしかすると「レガシーコマンド」なのかもしれませんけどね。
コメント