どんな `find`コマンドがCVSフォルダを除いてディレクトリ内のすべてを削除しますか?


1

私はディレクトリがあります。

$ tree
.
|-- CVS
|   |-- Entries
|   |-- Entries.Log
|   |-- Repository
|   `-- Root
|-- dirA
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file1
|   `-- file2
|-- dirB
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file3
|   `-- file4
|-- file5
`-- file6

このコマンドで削除したいファイルをすべて見つけることができます。

$ find . -name CVS -prune -o -type f -print

しかし私が変わったら -print-delete

$ find . -name CVS -prune -o -type f -delete

すべてが消えました。どうして?

回答:


3

のmanページを見てください。 find、 下 -delete

後で-deleteと一緒に使用するfindコマンドラインをテストするときは、後で予期しないことが起こらないように、-depthを明示的に指定してください。 -deleteは-depthを意味するため、-pruneと-deleteを同時に使用することはできません。

たぶんあなたはただ使うことができます -exec rm {} + の代わりに -delete この文脈では、あなたがやりたいことをするために、しかしいつものように火で遊ぶとき:make 非常に それは懸命に行く前にはたらくことを確かめなさい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.