73

私の Unix マシンには、で始まるファイルがいくつかあります。

 --

例えば--testings.html

削除しようとすると、次のエラーが表示されます。

cb0$ rm --testings.html
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
       unlink file

私は試した

rm "--testings.html" || rm '--testings.html' 

しかし、何も機能しません。

端末でそのようなファイルを削除するにはどうすればよいですか?

4

7 に答える 7

150
rm -- --testings.html

この--オプションは、以降のすべての引数をオプションとしてではなく、ファイル名として扱うように rm に指示します-

これは、rm コマンドに固有のものではありません。getopt 関数はそれを実装し、多くの (すべて?) UNIX スタイルのコマンドはそれを同じように扱います:--オプション処理を終了し、その後は通常の引数です。

http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

于 2009-04-01T15:59:20.217 に答える
56
rm -- --somefile

rmそれは機能しますが、オプションを解析するために getopts を使用することに依存するソリューションです。独自の解析を行い、それを吐くアプリケーションもあります ( --「オプションの終了を意味する」ロジックを必ずしも実装しているとは限らないため)。

そのため、頭蓋骨を突き破る必要がある解決策は次のとおりです。

rm ./--somefile

この方法では、引数が . で始まらないため、常に機能します-

さらに、本当にまともなシェルスクリプトを作成しようとしている場合。技術的に./は、すべてのファイル名パラメーター展開の前に配置して、ファンキーなファイル名の入力が原因でスクリプトが壊れないようにする必要があります (または、スクリプトが想定されていないことを行うために悪用/悪用されるのを防ぎます: たとえば、rmファイルを削除します)ただし、ディレクトリをスキップします; whilerm -rf *はすべてを削除します. " " というファイル名を-rfスクリプトまたは誰かtouch ~victim/-rfがこの方法で渡すと、その動作が変更され、非常に悪い結果が生じる可能性があります)。

于 2009-04-01T19:10:56.293 に答える
18

またはのいずれrm -- --testings.htmlrm ./--testings.html

于 2009-04-01T16:01:45.967 に答える
7
rm -- --testings.html
于 2009-04-01T15:59:14.943 に答える
4

それを行うさらに別の方法は、 find ... -name "--*" -delete を使用することです

touch -- --file 
find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 
于 2009-04-02T10:43:43.867 に答える
3

ファイル名に使用できない文字を含むファイルを削除するためのより一般的な方法として、ファイルの inode を使用する方法があります。

経由で入手できますls -i

例えば

$ ls -lai | grep -i test
452998712 -rw-r--r--  1 dim   dim      6 2009-05-22 21:50 --testings.html

そしてそれを消去するには、find の助けを借りて:

$ find ./ -inum 452998712 -exec rm \{\} \;

このプロセスは、簡単にスクリプト化できるため、ファイル名の特性を持つ多数のファイルを処理する場合に役立ちます。

于 2009-05-22T18:56:30.357 に答える
1
rm ./--testings.html

また

rm -- --testings.html
于 2009-04-01T16:03:02.127 に答える