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番号を用いてファイルを削除することです。
- 文字化けしたファイル(ディレクトリ)の inode 番号を調べる
- 文字化けしたファイル(ディレクトリ)を inode 番号から確認する
- 文字化けしたファイル(ディレクトリ)を削除する
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 #
こちらの方法でファイルを無事に削除することができました。