rm
再帰は下向きにしか機能しませんか?
rm -r x y
を削除x
しy
、その中のすべて(ディレクトリである場合)を削除しますが、その親またはその外部のものは削除しません。
実行中:sudo rm -R *.QTFS
現在のディレクトリとその子にあるすべての* .QTFSファイルを削除しますか?
いいえ。これは、指定されたすべてのファイルが削除されます*.QTFS
、再帰的にすべてのファイル内のディレクトリと呼ばれ*.QTFS
、そしてそれらのディレクトリに自分自身を。他の削除動作が必要な場合は、を使用しますfind -delete
。
で表示される現在のディレクトリには、より良い単語がないためのリンクとリンクがls -lha
含まれているので、なぜディレクトリツリー内で再帰がこれらの上位をたどらないのですか?rmアプリに人為的な制限はありますか、それとも本物ではありませんか?.
..
.
..
の人為的な制限ですrm
。
しかし、実際にはそれほど人工的ではありません-それが機能する唯一の方法です。場合はrm
、親に続く..
リンクを、すべてのは、rm -r
次のすべてによって、システム上のすべてのファイルを削除します..
すべての方法バックへのリンクを/
。rm
見ている..
と.
、それは時に各ディレクトリ内のエントリを一覧表示したコンテンツを、と明示的な理由のためにそれらを無視します。
実際に自分で試してみることができます。実行するrm -r .
と、ほとんどのrm
実装は動作を拒否し、エラーを明示的に報告します。
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(そのメッセージはGNUからのものrm
です。他のものも同様です)。明示的な引数としてではなく、暗黙的にこれらのエントリに遭遇すると、それらを無視して続行します。その動作はPOSIXに必要です。GNU rm
および多くのBSDではfts_read
、階層トラバーサル機能のファミリーによって自動的に提供されます。
または.
、..
本物ではありませんか?
.
そして、..
されている一般的にそれはファイルシステム固有のですが、実際のディレクトリエントリ。関係なく、ほとんどすべてのユーザーコードへの実際のエントリであるかのように表示されます。ソフトウェアの多くの部分(だけでなくrm
)は、暴走や望ましくない再帰をキャッチまたは防止するために、その動作を特別なケースにしています。