「検索を削除」が「深さ」を意味するのはなぜですか?

「検索を削除」が「深さ」を意味するのはなぜですか?

GNUのマニュアルページではmeanのfind使用について明示的に警告しますが、この要件の説明を見つけることができません。-delete-depth

-deleteファイルを削除します。削除に成功した場合はtrueです。削除に失敗すると、エラーメッセージが表示されます。 [...]-deleteオプションを使って自動的にオンにします-depth

find --version
find (GNU findutils) 4.8.0

これは暗黙的に注文後の進行です。

find /path -type f -delete

しかし、これは一般的な巡回方法である予約注文巡回ですfind

find /path -type f -exec rm -f {} +

書きたいと思えば-prune書くことができず、-deleteもう少し面倒なことを書かなければなりませんでしたが、-exec rm {} +結果は同じようです。

これ-deleteはディレクトリを削除しませんが、なぜfind -deleteヒントが必要なのですか-depth

ベストアンサー1

これ-deleteはディレクトリを削除しませんが、findが-deleteそれを暗示する必要があるのはなぜですか-depth

GNU ユーティリティの場合、リファレンスドキュメントはマニュアルページではなくユーティリティの情報ファイルです。場合によっては、質問で参照されているマニュアルページが誤解を招く可能性があります。find -deleteディレクトリを削除できます:

ファイルまたはディレクトリを削除します。削除に成功した場合はtrueです。削除に失敗すると、エラーメッセージが表示されます。

-deletefind2004年にGNU(findutils4.2.3)に導入されて以来、ディレクトリ削除をサポートしてきました。

ディレクトリを削除する理由は、以前に空にしたディレクトリのみを削除できるため-deleteです。代わりに対応するディレクトリです。-depth-deletermdirrm -rf

find /path -type f -delete両方の呼び出しはジョブをファイルに制限するため、およびの最終的な効果find /path -type f -exec rm -f {} +は同じです。findファイルのみが削除されるため、削除順序はfind巡回には影響しません。ディレクトリを削除すると、find巡回が機能します。ディレクトリで使用している場合は、-deleteディレクトリ自体を削除する前に、ディレクトリ内のすべてのサブディレクトリを処理する必要があります-depthrm -rf閲覧中のディレクトリで使用している場合は、find削除されたディレクトリのサブディレクトリに移動する前に削除を通知する必要があります。これは-pruneこれが役に立つ例です。

ディレクトリが削除されない場合は、設定しないように特別に作成することを想像できますが、-depth一般的な場合は事前に決定することはできません。 (-depthジョブではなくオプションなので、最初のジョブが実際に処理される前に設定する必要があります。)

または、過去に提案したとおり、私たちは特別な処理がまったく必要なく、必要なときに作業を実行できる-deleteようにユーザーに任せることを想像できます。-deleteしかし、これにより、以前のバージョンとの互換性が損なわれます。コピーされた他の実装との互換性-delete。また、見ることができますSavannahのバグ#20865についての議論

牛に似た一種の栄養findutils -delete明示的に確認-pruneバージョン4.3.11以降、-depth明示的に設定しないと中断されます。指摘されたコメント

-delete述語がPOSIXにないため、私たちはそれを避けることができます。もしそうなら、ここで致命的なエラーを引き起こすことはできません。

で議論したように-deleteオプションを使用して検索すると/save/ディレクトリ内のファイルが削除されますが、削除オプションなしで検索するとそのファイルが見つからないのはなぜですか?、GNUを使用する場合はを使用する必要がfindあります。-execdir rm {} +-exec rm {} +

おすすめ記事