文字化けファイルをinodeで消す

探してみたらけっこうやり方あるみたいですね。
でも備忘のため書いておきます。

そもそもなんでinode番号指定で消す必要があるのか?ですが、こんなことがありました。

  • 一行一行ファイル名を書いたリストを作る
  • そのリストを読み込む
  • 1行づつ書いてあるファイル名にもとづいてファイルを作る

ってことをやってました。

そんでこの最初のファイル名のリストを作るところで、誰かがasciiコードのBOMありでファイルを作られたことがあったんですね。
BOMは詳しくないのでここでは説明を省きます。
とにかくファイルの最初に数バイト入ってしまいます。

そのためプログラムで読み込むと最初の一行目のファイル名が文字化けしてしまいます。
その文字化けのままファイルを作るとファイル名も文字化けしたまま作られてしまい、rm でファイル名を指定することができなくなりました。

対処方法

ls -li でinode番号を取得

$ ls -li
合計 0
1057945 -rw-rw-r-- 1 hoge hoge 0 11月 28 16:07 hoge.txt

inodeでfindしてファイル探して削除

find -inum 1057945 -exec rm -f {} \+

これでOK

ちなみに {} は見つかったファイルが一つ一つ入ってきます。
\+ はその一つ一つが一度に羅列して入ってきます。

qiita.com