rm: "。"または、「..」ディレクトリの削除を拒否します。 「..」をスキップします。

rm: "。"または、「..」ディレクトリの削除を拒否します。 「..」をスキップします。

..ディレクトリから削除しようとすると、なぜエラーが発生するのですか?

rm: refusing to remove '.' or '..' directory: skipping '..'

私がなぜこれをするのか尋ねる前に:ただなぜなら。

答え1

それはとの内容rmも再帰的に削除される一部のシェル(POSIXシェルを含む)のバグ機能を解決するために、ほとんどの実装に保護装置を追加しました。rm -rf .*...(これはForsythシェルやpdkshなどの派生物によって修正され、zsh少なくともfish1です。)

(このバグ機能のないシェルの)組み込み機能を使用できますrmzsh

zmodload zsh/files # to load and enable the builtin version of rm
                   # and a few other utilities
rm -rf ..

あるいは、BSD、GNU、findまたは互換性を使用して次のことを実行できます。

find .. -delete

明確に言えば、親ディレクトリ(現在の作業ディレクトリを含む)の内容を(再帰的に)削除します。

現在のディレクトリ(通常は最新のシステム)からアイテムのリンクを解除したい場合は..不可能です。そのエントリを含むディレクトリが存在する限り存在し、削除できません...一部のファイルシステムでは、仮想(ディレクトリファイルの物理エントリではない)でもあります。

これを削除しても(たとえば、debugfsディレクトリの内容を手動で編集して)、次にファイルシステムのチェックが完了すると再生成され(fsck)、一部のアプリケーション(cdPOSIXシェル組み込みなど)は完全に無視します。 (現在のディレクトリに関係なく、現在(保存されcd ..ている現在の作業ディレクトリの末尾からパスコンポーネントを削除します。)POSIXでは、$PWD....ドンdir/../whatever)ディレクトリと同じパスの場合。


1バージョン5.2には、この問題を解決するためのbashオプションが追加されましたglobskipdots

答え2

あなたが望むコマンドは次のようになります:隠しファイルにも機能しているrm -rf * と思いますか?rm -rf .*わからない。

ただし、このプログラムを実行する現在のディレクトリにあることを確認してください。つまり、入力pwdまたはecho $PWD確認するには...

はい、現在のディレクトリのすべてのファイルが削除されます。

rm -rf ../*また、テストしてみたので動作すると確信しています。必要に応じて親ディレクトリ(「../」)を追加できます。

したがって、基本的に愚かなセキュリティをバイパスするには、最後に「splat」を追加するだけです。

関連情報