Linux 特殊文字・文字化け 削除できないファイルの削除方法

Linux

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

Linuxを操作していると、コマンドの入力ミスやスクリプト出力が原因で、「文字化け」や「特殊文字」を含むファイルが作成されてしまい、rmコマンドで削除できないときがあります。

  • 文字化けファイルを削除したい
  • 特殊文字ファイルを削除したい
  • rm コマンドでファイルが削除できない

そんな時に対応するための手順を解説します。

特殊文字・文字化け 削除できないファイル

実例解説 通常の rm コマンドで削除できない

実例を見ながら解説します。コマンドを打ち間違えて出来上がったファイルです。

# ls
 '-restarting -s'$'\033\033\033'':q'

特殊文字と文字化けが複合し入り交ざったファイル名です。

通常の rm コマンドから削除しようとするとエラーになってしまいます。

# rm '-restarting -s'$'\033\033\033'':q'
rm: invalid option -- 'e'
Try 'rm ./'-restarting -s'$'\033\033\033'':q'' to remove the file '-restarting -s'$'\033\033\033'':q'.
Try 'rm --help' for more information.

ファイル名の一部を rm コマンドの引数として認識し力尽きています。

inode番号からファイルを削除

inode番号からファイルを削除する手順

いろいろなやり方があるのですが、手っ取り早く削除でき汎用的に利用できる手順は、inode番号を用いてファイルを削除することです。

  1. 文字化けしたファイル(ディレクトリ)の inode 番号を調べる
  2. 文字化けしたファイル(ディレクトリ)を inode 番号から確認する
  3. 文字化けしたファイル(ディレクトリ)を削除する

inode番号を用いてファイルを削除したいと思います。

ファイルの inode 番号を調べる

さっそく、inode番号を確認します。ls コマンドに引数(-i)を与えます。

# ls -i
51141328 '-restarting -s'$'\033\033\033'':q'

ファイル名の前に表示されているのがinode番号です。

inode 番号からファイル名を確認

find コマンドを利用し inode番号からファイルを確認します。

# find ./ -inum 51141328
./-restarting -s???:q

ファイル名が表示されました。 ls コマンドで表示されたファイル名と異なっています。これは厄介です。特殊文字により区切り位置を制御できていないようです。

ファイルを削除

find コマンドと rm コマンドをつなげてファイルを削除します。

  • find [検索パス] -inum [inode番号] | xargs rm -rf
  • find [検索パス] -inum [inode番号] -exec rm -rf {} \;

どちらかのコマンドを実行しファイルを削除します。

# find ./ -inum 51141328 | xargs rm -rf
rm: invalid option -- 's'
Try 'rm --help' for more information.

xargs コマンドを利用してファイルを削除しようとしたらエラーが出力されてしまいました。今回のファイル名は強敵です。

# find ./ -inum 51141328 -exec rm -rf {} \;
# ls
#

こちらの方法でファイルを無事に削除することができました。