web-dev-qa-db-ja.com

名前が「-」で始まるファイル(ハイフン、別名ダッシュまたはマイナス)を削除するにはどうすればよいですか?

ファイル名がダッシュ(ハイフンまたはマイナス)で始まるファイルをどのように削除しますか-?私はリモートのOSXサーバーにsshしていて、ディレクトリにこのファイルがあります。

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

どうすれば削除できますか--help CLIから?この問題は、さまざまな形で遭遇することがあり、これらのファイルは簡単に作成できますが、取り除くのは困難です。

バックスラッシュを使ってみました

rm \-\-help

引用してみた

rm "--help"

マイナス(ダッシュまたはハイフン)文字がオプションとして解釈されないようにするにはどうすればよいですか?

377
Bryan Rehbein

「-」を使用して、次のようにrmがコマンドラインオプションの解析を停止するようにします。

rm -- --help
559
Vegar Nilsen

またはあなたがすることができます

rm ./--help
236
edfuh

findを使用してください:

find . -name '--help' -delete

そして、これは良い方法です。削除できるようなこのようなファイルがいくつかある場合は、最初に-deleteオプションなしでfindを実行するだけでファイルのプレビューリストを取得できます。ファイルは、-deleteでもう一度実行するだけで問題ありません。

実際、rmを避けてfindを優先することは(特に最初にプレビューを行う場合)、いつか必然的にrm *の間違いを避けるのに役立つ良い習慣です。

ただし、そのfindはすべてのサブディレクトリを再帰的に処理するため、次のようなサブディレクトリの深さ制約を指定して実行することをお勧めします。

find . -maxdepth 1 -name '--help' -delete

検索を現在のディレクトリに制限します。

41
aculich

Vegar Nilsenとedfuhの答えは非常によく、このような問題に対する適切な解決策です。

この質問に対する一般的な回答を追加して、難しいファイル名のanyファイルを削除できるようにします。最初にls -iまたは何らかの形式のstatを使用してそのiノード番号を取得し、次に現在のディレクトリでiノード番号を使用してファイルを検索し、rmコマンドを実行してファイルを削除しますiノード番号が一致するファイル

find . -inode <inode> -exec rm {}\;

Iノード番号は各ファイルシステムで一意であるため、これを使用してファイルを削除できます。 Unicodeまたはエスケープ文字の使用。入力するのが非常に面倒なので、行を追加することをお勧めします

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

bashを使用している場合は、.inputrcファイルに挿入します。これにより、可能な補完のリストを循環できます( 詳細については )。

21
Baldur

残忍な解決策:

Perl -e "unlink '--help' or die 'Could not unlink.';"

Perl -e "rmdir '-d' or die 'Could not rmdir.';"
11

ダッシュとスペースを含むファイルを作成してから削除するLinuxウォークスルー

注意してください!誤ってrm -rf /または同様のカスケード削除コマンドを実行しないでください。

削除しようとしているファイルにアスタリスクまたはスラッシュが含まれている場合は、.または/*または*またはオペレーティングシステムをカスケード削除する可能性のあるその他のワイルドカードを誤って送り出さないでください。

「-yo yo」というファイルを作成します

eric@dev ~ $ touch -- "--yo yo"
eric@dev ~ $ ls
bin  --yo yo

最初に、find:で検索します

eric@dev ~ $ find . -name "*--yo yo*"
./--yo yo

Findコマンドで、削除するファイルが1つだけ検出されることを確認します。

次に、-deleteオプションを渡して、検索して削除します:

eric@dev ~ $ find . -name "*--yo yo*" -delete
eric@dev ~ $ ls
bin  

ああ、それはなくなった。

8
Eric Leschinski

真夜中の司令官(mc)が最も簡単です。指差してF8キーを押すだけです;)

2
Marcin

これは、このスレッドを見つける前に使用したソリューションです。
vimを使用して「編集」ディレクトリ:

vim .

次に(vimで)ファイルを選択し、delを押して削除を確認します。
完了したら、:qでvimを終了します

1
atti

プレフィックスとしてディレクトリ名を追加しようとしましたか?

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

一般に、ファイルのプレフィックスとしてディレクトリを使用すると、パーサー関数によるコマンドオプションとしての「マイナス」文字の誤った解釈を回避できます。