web-dev-qa-db-ja.com

$ find -deleteが機能しないことがあるのはなぜですか?

私が話しているのは、マンページのこの部分だと思います。これはかろうじて私には判読できません。

   -delete 
 ...セキュリティ上の理由から、
パス名に「/」文字が含まれるファイル名を「」から削除しようとはしません。

具体的には、私がやろうとしているのは$ find . -name '.svn' -type d -deleteです。代わりに-execを使用できることはわかっていますが、findは、ディレクトリの奥深く(パス名に多くの/文字が含まれていることは明らかです)を含む他の名前でも問題なく機能するようです。

おそらく、代わりにドットファイルを無視していて、ドキュメントが間違っていますか?

4
NReilingh

「セキュリティ上の理由」は、findがファイルを列挙してから削除するまでの間に、攻撃者がファイルのパスの1つのコンポーネントを変更して、予期しないディレクトリへのシンボリックリンクになる可能性があるためです。 、結果として、予期しないディレクトリから同じ名前のファイルが削除されます。たとえば、攻撃者がfoo/etc/passwdを指すシンボリックリンクに変更できる場合、/tmp/foo/passwdではなく/etcを削除してしまう可能性があります。

GNU検索ドキュメント のセクション9.1.5( "-execのより安全なバージョン")では、この問題について詳しく説明しています。

3
jjlin