Linux 文字化けたファイル名を操作できるようにする
2011/10/04 1件のコメント
文字化けしてファイル名での指定ができなくなったファイルはファイル名でも先頭に来るのでつい目についちゃいます。
共用環境で置き去りになっているそういうファイル名を見ると、作成してしまった人の当時のあせりようを想像しちゃったり、消し方わからなかったので後ろめたい感じでログオフしちゃったのかなとか・・・想像しちゃうのは私だけでしょうか。
i-node番号の特定とfindコマンドのアクション(-ok)機能で、操作できる名前にすれば自由に操作できるようになるのでメモおきます。
$ ls -li
でi-node番号確認(i-node番号が*****だったとします。)
$ find . -inum ***** -exec file ‘{}’ \;
で何者か探りを入れつつ、ファイルならば以下のように名前変えてしまえばあとはどうにか操作できるようになります。(;はコマンドの終了を明示、\は;のエスケープ。)
$ find . -inum ***** -ok mv ‘{}’ /tmp/ \;
してから、、、
$ find /tmp -inum ***** -ok mv ‘{}’ noname.dat \;
なお、findコマンドのアクションに関するオプションは(-ok)で都度確認するようにしたほうが確実です。とくにmvするときはリスク回避のため必ず(-ok)をお勧めします。パーティションごとに同一 i-node番号 は存在するので、パーティション構成や、findコマンドを実行したカレントディレクトリのpathによっては同一i-nodeのファイルが複数検索されてしまいます。想定しないファイルの名称まで変えないように注意しましょう。
(-ok)でYes/No返答する際も分かりにくいので、複数検索されてしまう場合には別のディレクトリに一時移動させてから、ファイル名変更するのが一番確実です。
bash-2.05# find / -inum 21653 -ok mv {} /tmp/ \; < mv ... /usr/sfw/bin/sample >? n < mv ... /opt/hoge/hoge/sample.txt >? n < mv ... /#タイトルなし# >? y bash-2.05# ls -li /tmp/ total 160 574855266 -rw-r--r-- 1 root other 18360 Aug 28 2007 #タイトルなし# ・・・略・・・ bash-2.05#
Findコマンドmanページ抜粋
-inum n
ファイルの i-node番号が n ならば真。
アクション
-exec command ;
command を実行する。コマンドの戻り値が 0 ならば真。 find のコマンドラインで指定された
こ れ以降の引き数は、 ‘;’ を含む引き数にいたるまで、すべて command の引き数とみなされ
る。文字列 ‘{}’ は現在処理しているファイル名に置き換えられる。これは command 引き数の
ど こにあってもよく、単独で置かれていなくてもよい (単独で置かれていなければならないよ
うな find もある)。これらの文字はシェルによって展開されないよう、 ‘\’ によってエス ケ
ー プするか引用符で囲む必要がある。コマンドは find を実行したディレクトリから実行され
る。・・・中略・・・
-ok command ;
-exec と似ているがまずユーザーに問い合わせを行い、標準入力から回答を受け取る。結果が
‘y’ または ‘Y’ で始まらない場合はコマンド実行は行なわず、偽を返す。
ピンバック: さくらレンタルサーバFreeBSDで文字化けしたファイルをrename | TowardSomethingNew