UNIX/Linuxでtouch \"la*
などの特殊文字を使用してファイルを作成した場合、rm "la*
を使用してそのファイルを削除することはできません。 iノード番号を使用する必要があります(名前の前に\
を追加するとできますが、ファイルの作成に使用されたことがユーザーとして推測する必要があります)。
Rmのマンページを確認しましたが、iノード番号についての言及はありません。 rm inodenumber
を実行しても機能しません。
このためのコマンドは何ですか?
他のいくつかの方法は次のとおりです:
特殊文字をエスケープする:
[〜] $ rm\"la\*
findコマンドを使用して、現在のディレクトリのみを検索します。 findコマンドはiノード番号を検索でき、便利な-delete
スイッチ:
[〜] $ ls -i 7404301 "la * [〜] $ find。-maxdepth 1 -type f -inum 7404301 ./" la * [〜] $ find -maxdepth 1 -type f -inum 7404301 -delete [〜] $ ls -i [〜] $
あなたが本当にこれをしたい場合-そしてあなたのユースケースが本当にあなたが必要とするように本当に見えないなら、あなたはファイルシステムデバッグツールを試すかもしれません。あなたがすべてを失うことをいとわないなら、それはそうです。
たとえば、ext2/3/4の場合、debugfs
コマンドには、iノードを取得するように見える「kill_file」オプションがあります。他の応答で述べたように、存在しないファイルを指すディレクトリエントリが存在するため、これはファイルシステムを損傷します。後でfsck
を実行すると、これを修復できる場合があります。マウントされたファイルシステムでこれを行うことはできません。
しかし、私は強くお勧めします適切なエスケープ/引用符を使用し、以前の応答で述べたように、通常のrm
コマンドでそのようなファイルを削除し、さらにrm -i
を使用して追加します*のようなグロビング文字を含むファイル名を扱うときの安全性
私が抱えていた課題は、ダッシュで始まるファイル名を削除することでした-rmは常にそれをホスト名として解釈したいと考えています。私はこれを使ってこれを解決しました:
rm ./-g4xxx
「特殊文字をエスケープする」アプローチを強くお勧めしますが、修正可能なファイルシステムの破損が本当に必要な場合は常にclri
コマンドが存在します。
rm -- filename
を呼び出すと、ダッシュで始まるファイルを削除できます。