このコマンドによってすべてが削除されたのはなぜですか?

このコマンドによってすべてが削除されたのはなぜですか?

Unix ボックスでこのコマンドを実行します:

find . name CVS -exec rm -fr {} \;

CVS現在のディレクトリから任意のディレクトリ内で呼び出されるすべてのファイルを削除したいのですが、すべてが削除されました。

幸いなことに、回復するために必要なことは、CVS から再度チェックアウトすることだけでした。/開始ディレクトリとして指定したと想像してみてください。

理由は、nameの代わりにを使用したためだと思います-name。 次のように再実行します。

find . -name CVS -exec rm -fr {} \;

そして、それはうまく動作するようです。nameではなく を使用すると、正確に何が起こるのでしょうか-name?

答え1

の前のダッシュが抜けている-nameので、パス.、およびnameという名前CVSで、ドットは現在のフォルダーを参照するため、すべてが削除されます。

find ユーティリティは、リストされている各パスのディレクトリ ツリーを再帰的に下降します。

echo実行するコマンドの前にを使用すると簡単にテストできます。

検索 . name CVS -exec echo rm -fr {} \;

関連情報