回答:
他のいくつかの方法が含まれます:
特殊文字のエスケープ:
[〜] $ 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 [〜] $
-xdev
他のマウントされたファイルシステムにも同じiノード番号を持つ無関係のファイルがある可能性があるため、オプションを使用して検索を制限する必要があります。
たぶん私は何かを見逃していますが...
rm '"la*'
とにかく、ファイル名にはiノードがありませんが、ファイルにはあります。ファイルを指すすべてのファイル名を削除せずにファイルを削除しようとすると、ファイルシステムが破損します。
あなたが本当にこれをやりたいなら、そしてあなたのユースケースが本当に必要なように見えないなら、あなたはファイルシステムデバッグツールを試すかもしれません。あなたがすべてを失うことをいとわないなら、それはそうです。
たとえば、ext2 / debugfs
3/4の場合、コマンドにはiノードを取るように見える「kill_file」オプションがあります。他の応答で述べたように、これは存在しないファイルを指すディレクトリエントリがあるため、ファイルシステムに損傷を与えます。fsck
後で実行すると、これを修復できる場合があります。マウントされたファイルシステムでこれを行うことはできません。
しかし、適切なエスケープ/引用を使用し、以前の応答で述べたように通常のコマンドでそのようなファイルを削除することを強くお勧めしますrm
- rm -i
*
「特殊文字をエスケープする」アプローチを強くお勧めしclri
ますが、修正可能なファイルシステムの破損が本当に必要な場合は常にコマンドがあります。
clri
通常、Oracleシステム(SunOSなど)にのみ存在することに注意してください。
私が抱えていた課題は、ダッシュで始まるファイル名を削除することでした-rmは常にホスト名として解釈したいのです。私はこれを使用して解決しました:
rm ./-g4xxx