natural born minority
Linuxには「デスクトップ運用する場合のユーザのホームディレクトリに最初からあるディレクトリと意味」が決まっています。
(freedesktop.org で提唱されている概念っぽい。サイトでは「”well known” user directories」と解説している。ツール等では「xdg-user-dirs」と表現されていることが多い。)
それは「概念的なディレクトリ」であり、初回ディレクトリ時に「言語ロケールごとに実ディレクトリ名がローカライズされ」ます。
これは「意味のある特別扱い」のディレクトリで、アイコンも個別のアイコンとなり、例えばファイル選択ダイアログに意味に応じて表示されたり、nautilsの左ペイン(お気に入り)に初めから入っているなど、扱いが違います。
ですので、おいそれとリネーム/移動などは出来ず「設定と一緒に変更する」必要があります。
メカニズム的には、~/.config/user-dirs.locale
ファイルに、「概念的なディレクトリと実ディレクトリ名のマッピング」が管理されている感じです。
そんなスペシャルなディレクトリですが、日本語環境だと「コンソールから移動するのに入力が面倒」という理由から「ロケールを英語圏にしてアルファベットに変えてしまう」という知見が、 世では多く在ります。
コンソールから、
LC_ALL=C xdg-user-dirs-gtk-update
とやると、ダイアログが表示されるので…
「Update Names」をクリック。するとディレクトリ名がアルファベットにリネームされます。
でも、自分は「環境のAsCode」を目指して居るので「出来ればCLIでやりたい」のです…。
「gtkはGUIのキット」ということで、コマンドから削ると、変更することができました。
LC_ALL=C xdg-user-dirs-update --force
ただ…「GUI版と違ってリネームではなくディレクトリ作成&設定変更」な機能のようで、結局「日本語名のディレクトリも残ってしまう」状態になります。
うーん、一つ解決すると一つ上手く行かないものですね。
なんとか「冪当を確保しつつ」「オプションを工夫して」「ループしてコピーしてファイルを維持して…」など試行錯誤したのですが、 上手く行かなかったので…。
と決め打ちで、
# 設定変更 & 英名への変更
LC_ALL=C xdg-user-dirs-update --force
# ホームディレクトリにある「名前に2バイト文字を含む」全てのディレクトリをデストロイ。
find ~/ -maxdepth 1 -type d | LANG=C grep -v '^[[:cntrl:][:print:]]*$' | xargs rm -rf
という「短さ重視の2行」で片付けました。
すごく「これやったんや、俺の欲してたものは!」というコマンドに出会っても、 対話型だったりダイアログ上がってくるのが必須だったりして、 「CLIだけで片付かないもの」が多く在ります。
今回は「たまたまコマンド叩いてみて見つけた」レベルなのですが、 「これに対応する(CLIの)コマンド無いかな?」 という嗅覚と視点をいつも置いて、これからはコマンドを探して行きたいなと思います。
以下を参考にさせていただきました。ありがとうございます。