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です。削除に失敗すると、エラーメッセージが表示されます。
-delete
find
2004年にGNU(findutils
4.2.3)に導入されて以来、ディレクトリ削除をサポートしてきました。
ディレクトリを削除する理由は、以前に空にしたディレクトリのみを削除できるため-delete
です。代わりに対応するディレクトリです。-depth
-delete
rmdir
rm -rf
find /path -type f -delete
両方の呼び出しはジョブをファイルに制限するため、およびの最終的な効果find /path -type f -exec rm -f {} +
は同じです。find
ファイルのみが削除されるため、削除順序はfind
巡回には影響しません。ディレクトリを削除すると、find
巡回が機能します。ディレクトリで使用している場合は、-delete
ディレクトリ自体を削除する前に、ディレクトリ内のすべてのサブディレクトリを処理する必要があります-depth
。rm -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 {} +