というディレクトリを削除しようとしています--crm
。私がするとき
rm -f -R '--crm'
次のエラーが発生します。
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
私も試しました
rm -f -R *crm
ただし、ディレクトリは削除されません。
私が何をすべきかについての手がかりはありますか?
ベストアンサー1
正直なところ、これはUnix&Linux、Ask Different、またはSuperUserなどの他の.SEのいずれかに適しています。だから私はあなたが反対票を受け取ったと思います。その意味は…
短い答え
答えはrm -r ./--crm
、またはより良いものですrmdir ./--crm
。
本当の答え
OSでは。
数man rm
日間、man bash
これらの概念のいくつかを読んで学びましょう。
さらに、ほとんどのUnixコマンドラインプログラムは、コマンドに続く特定のパラメータを使用して実行されます。一部は明らかであり、プログラムにデータを渡すことによって機能します。たとえば、を実行すると、rm myfile
カーネルを呼び出してファイルのリンク解除機能を実行できますmyfile
。他のパラメータは、特定のオプションをオンまたはオフにするスイッチセットのように機能します。これは、プログラム自体の動作を制御するためにデータを渡すのではなく、「フラグ」とも呼ばれます。たとえば、rm -h
何も削除されませんが、便利なテキストの小さな部分が印刷されます。
したがって、珍しい名前のファイルを削除する際の問題は、プログラムがそれを解釈する方法がわからないことです。文字を投げることも役に立ちません。問題が発生する可能性があります。
Bashを使う:うまくいかない理由
Bash(シェル)は、単一引用符内の内容を文字通り解釈し、引用符を削除し、内容をそのままインポートします。したがって、を実行すると、rm '--crm'
実際に同じタスクを実行しますrm --crm
。 Bashは*
これを排他的に特殊文字として扱い、「ワイルドカード」操作を実行します。呼び出したプログラムを実行する前に Bash指定した各一致するパス名でパラメータを拡張します。。実際にディレクトリに
~$ ls
--crm dummy.txt file.crm
次に実行すると、rm *crm
Bashは最初にそれを展開してから拡張バージョンを実行します。
~$ rm --crm file.crm
...したがって、「crm」で終わるすべてのファイルが削除される危険性があり、最初のディレクトリをフラグに戻します。
Bashの使用:仕組み
ディレクトリを削除するファイルとして処理するには、Bashが知っrm
ておく必要があります。上記のようなほとんどの一般的なファイルでは、myfile
Bashは通常、現在の作業ディレクトリを参照していることがわかりますcd
。この問題を管理するのに役立つ2つの特別な役割があります。cd ..
たとえば、現在のディレクトリ「上」ディレクトリに移動します。 /Users/foobar にある状態で を実行すると、cd ..
/Users に移動します。同様に、現在のディレクトリを表す文字、つまりがあります.
。実行すると、すでにcd .
存在するディレクトリに移動します。あまり良く見えませんか?
しかし、これは残念ながら、名前付きディレクトリがどこにあるかをBashに通知する方法を提供します。.
ファイルは現在のディレクトリにあるので、--crm
それを指定して削除できますrm ./--crm
。まあ、具体的にはこれはディレクトリなので、知らなければなりませrm
ん削減そして再帰ディレクトリを参照し、そこで見つけたすべてを最初に削除します。フラグを使用してこれを行うことができます-r
。したがってrm -r ./--crm
。
最後の警告:これですべてが説明されているので、ランニングの重大なリスクも理解してくださいrm -r -f /
。-f
自分が何をしているのかわからない場合は、このフラグを絶対に使用しないでください。