Linux上で特殊文字を含む名前のファイルの削除方法
はじめに
コマンドの操作ミスやスクリプト出力の文字化けなどで特殊文字を含む名前でファイルができてしまい、単にrmコマンドでは削除できない時の削除方法。
いざという時のためにメモ。
実験用のファイル
temp $ ls "ccc.txt -bbb.txt aaa.txt temp $
他にもありえますが用意するのがめんどくさかったのと、今回の削除方法はファイル名によらず使えるのでこれで。
実験
とりあえず用意したファイルを普通に消そうとするとどうなるか見てみます。
先頭がダブルクォートのファイル名
temp $ rm "ccc.txt > temp $
次の入力を待たれてしまいます。
先頭がハイフンのファイル名
temp $ rm -bbb.txt rm: illegal option -- b usage: rm [-f | -i] [-dPRrvW] file ... unlink file temp $
rmコマンドのオプションと解釈されてしまいます。
解決方法
いろいろなやり方があるのですが、汎用的な方法を。
手順1 ls -iでinode番号を確認
temp $ ls -i 2991451 "ccc.txt 2991471 -bbb.txt 2991475 aaa.txt temp $
ファイル名の前に表示されているのがinode番号です。
手順2 確認したinode番号を指定して削除
temp $ rm `find . -inum 2991451` temp $ ls -bbb.txt aaa.txt temp $ rm `find . -inum 2991471` temp $ ls aaa.txt temp $
削除できました。
実際にやる場合は、事前の削除対象の確認を忘れずに。
おまけ
実験用に使ったパターンのものは別の方法でも削除できます。
先頭がダブルクォートのファイル名
2つ方法があります。
先頭がハイフンのファイル名
こちらは、ダブルクォートの方法では消せないので以下の方法を使います。
- コマンドのオプションに
--
を指定するrm -- -bbb.txt