`-rf`というファイルを削除するには、どのコマンドを使用する必要がありますか?


67

-rfファイルシステムで呼び出されるファイルを作成するある時点で何かおかしなことをしました。
今、私はそれを削除する方法を理解することはできません...

私はもう試した:

rm "-rf"
rm \-rf

これらはすぐに終了します。

誰でもこのファイルを削除する方法を知っていますか?できれば、誤ってフォルダ全体を消去しないでください。


33
正確な構文を思い出さずに、システムからrm呼び出さ-rfれたファイルを試行するのは大変です!
クリストフ

3
これらが機能しない理由を説明するには:引用符とエスケープはシェルによって解析され(通常はbash)、解析の結果はrm(in argcargv)に渡されます。したがって、これらの両方の結果は配列["rm", "-rf"]に渡されrm、それはあなたが期待することをします。
タナトス

3
私は、これはUnixおよびLinux stackexchangeから、この1の重複に近いと思う:unix.stackexchange.com/questions/1519/...
frabjous

12
古いギャグは*、フォルダーに名前を付けたファイルを取得することです。名前の付いた-rfものも含めて楽しみ
ましょ

@RBerteig:mkdir './-rf '(ls --classify、シェルエイリアスの一般的なデフォルト、/を追加します)

回答:




34

または、いつでもディレクトリを編集し、その方法でファイルを削除できます。

vim .

次に、ファイルが含まれている行を削除します(Dを使用すると、ddは機能しません)。


5
ナイストリック![いくつかの役に立たない文字]
セルヒオアコスタ

今日の午後にこの回答を初めて見たとき、これがダウン票に値するとは思いませんでしたvimが、diredモードがあったことを確認する機会がありませんでした。明らかに、テキストエディタで実際のディレクトリ自体を編集することはお勧めできません。それemacsも同じ理由で機能することに注意してください。
RBerteig

1
Vimを賢く使用するための追加ポイント!:)
ピエールアントワーヌラファイエット

知っておくといい;)
schöppi10年

25

奇妙なファイル名を削除するための一般的な手法は、使用することです。

 ls -li

ファイルのiノード番号を見つけて使用します。

find ./ -inum <number of file> -delete

すべての特殊なケースを覚える必要はありません。


4
findファイルを削除する権限があることを知りませんでした。
zneak

また、ボックスで適切なGNUの検索結果にアクセスできる場合、未知の名前(バックスペース文字で始まるか、バックスペース文字を含む、または末尾に余分な空白を含む)を持つファイルをキャッチするのにも最適です。
オルファン

17

「rm--filename」トリックについて知っていても、一般的には何らかの理由で先頭にあるファイルを取得するときに、削除したい名前でGUIファイルマネージャを起動してそこからそれを行い、チャンスを排除します間違いの。


1
彼はGUIをまったく持っていないので、これはうまくいかないかもしれません。
ワッファー

12
それが愚かで間違っていた場合、多分それは下票に値するが、私はそれが「うまくいかないかもしれない」という理由だけでこの答えを下票することを信じない。この提案に害はありません。
JT.WK

4
X.ない人のために真夜中の司令官(または他のcursesベースのファイルマネージャ)は、常にあります
thomasrutter

9

確認したい場合:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

4

あなたが自分が石器時代に引き戻されたと感じる非GNU Unixにいる場合(--構文、-inum検索するスイッチ、リンク解除コマンド、エディタがディレクトリの編集などを拒否するなど)、あなたはまだ自分を助けることができます:

find . -name '-rf' -print | xargs rm -i

これにより、findはすべての潜在的な候補をrmにフィードし、次にrmはフィードされるすべての単一ファイルの許可/拒否を要求します。

スイッチをrmサポートしていない場合-i(PA-RISC 1.1上のHP-UX 10.2をお使いですか?)、さらに注意してください:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

あなたのシステムが持っていない場合はfindどうなりますか?
ライライアン

それは確かに悪でしょう。残念ながら、Unixをインストールせずにインストールしたことはまだありません。ポインタをください。
オルファン

少し考えてみると、serverfaultでの質問の方が私の答えの方が適切だったでしょう。スーパーユーザーは、私が言及している機械と同じくらい古い機械を持っている可能性はあまりありません。そして、そうする人は自分自身を助けることを学んだでしょう。;-)
オルファン

+ 1、@ Olfan、あなたの防衛において、誰かがクローゼットのどこかでレガシーユニックスに出会ったところで、ヒントやコツを学ぶためのリソースがまだ必要です...
RBerteig

3

jleedevの答えをサポートして、私は改善します:

rm -i -- -rf

対話モードにして確認を求めるので、削除した内容を確実に確認できます。(ただし、解決策は問題ありません。単にあなたの安心のためです)

実際には、それも使用します:

\rm -i -- -rf

エイリアスを使用していないことを確認してください。


2

すでに提案されているように、私は常に構文を使用しました

rm -rf -- filename

-がコマンドに他のパラメータではなくファイル名だけを検索するように指示するため、プレフィックスとしてダッシュを使用してファイルを削除する必要があったとき。

念頭に置いて、誤ってファイルを削除して重要なフォルダを保護するために、* -iという名前の空のファイルを作成するのに使用しました。これは通常、*検索を解決するときにファイルリストの先頭に配置されます。だからコマンド

rm -rf *

保護されたフォルダで実行されると、実行中にコマンドで展開されます:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

シェルは、すべてをすぐに削除する代わりに、確認の要求を停止します(-iオプションが必要)。


-iファイル名ハックの+ 1-「I」は懐疑的でしたが、テストされています。
rymo

2

前回この問題が発生したとき、次の方法で解決しました。

python

輸入OS

os.remove( "-rf")


1

マーティン・クレイトンは正しい。

非常にシンプルで論理的です。オプションが存在する場合、それは常にある-XXXか、--CCCCあなたは置けばそう./か、フルパスが-rf選択肢として考えることができず、通常の文字列と見なされます。

「すべて」の奇妙なファイル名で動作します。

#pwd
/ tmp / TEST
#touch ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#

1

rm-ほとんどのgnuツールが受け入れる-rf-オプションの終わりのマーカーとして

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.