find / rm -iname '* phpmyadmin'がphpMyAdmin-Version-XYZ.zipを削除しないのはなぜですか?


8

私はこの次のコードを持っています:

find ./ -iname '*phpmyadmin' -exec rm -rf {} \;

これはと呼ばれるディレクトリが削除されますphpmyadminが、それはしませんというファイルを削除しますphpMyAdmin-Version-XYZ.zip

を削除し-rfても削除されません(おそらく、-inameの2番目の問題が大文字と小文字の区別に影響を与えていないためです)。

  1. 単一のrm(ファイル、ディレクトリ、ソフトリンク)のiノードを削除する方法はありますか?
  2. を追加し-inameても効果がないのはなぜですか?

注:「inodeを削除する」という引数はで見つかりませんでしたman rm


1
findサポートしている場合は、-deleteアクションを試してください。(また、これを誤って行う多くの方法の詳細については、gnu.org / software / findutils / manual / html_node / find_html /…を参照してください。)
zwol

回答:


31

問題は、パターンを使用してphpmyadmin大文字と小文字を区別せずに)で終わるファイルを照合することです*phpmyadmin。文字列を含むファイルをphpmyadmin(大文字と小文字を区別せずに)取得するには、次を使用します-iname '*phpmyadmin*'

find ./ -iname '*phpmyadmin*' -exec rm -rf {} \;

おそらく、削除する前に一致するファイルを取得することは正気でしょう:

find ./ -iname '*phpmyadmin*'

最初の質問に答えるためにrm、ユーザー空間ではiノードを処理するオプションはありません。


1
削除されたばかりのディレクトリに再帰しない-depthようにすることを検討する必要findがあります。
roaima

8
離れてこれを含んでいます答え、から何かを取るが、ちょうどOPのコマンドがなかったことを理由ことを強調したかったしないように削除したzipファイルはそれがなかったということでした見つけ、それを、「末尾が不足しているため* 'パターン上。
グウィンエヴァンス

3
@GwynEvansこれは、OPがパラメーターをfind追加する前にテストしなかったことも意味し-execます。とても危ない。
TulainsCórdova17年

ファイルごとに1 -exec rm -rf {} +つずつ実行すると、パフォーマンスが低下することはありませんrm
Charles Duffy

2
find ./ -iname '*phpmyadmin*' -exec /usr/lib/klibc/bin/nuke {} +

これは、誰かが-phpmyadminディレクトリを作成した場合でも機能します。


Find(少なくともここでは)の名前の前にを付ける./ので、それは必要ありません。それは実行さrm -rf ./-phpmyadminれますrmfind ./ -iname '*whatever*' -exec echo '{}' ';'テストしてみてください
デロベルト

@derobert:ほんの一握りの機会に失敗しました。噛まれたら二度恥ずかしがり屋。多分それはfindの引数が '-annoyingdirectoryname'のようなものである場合にのみ起こります。
ジョシュア

1
誰かが、たとえば、find */ではなく実行した場合find .、それは実行されます(一致するディレクトリ名がダッシュで始まっている場合)。そうは言って--も、議論の前に明示的なオプションの終わりを提供することによって、そのようなケースを処理するためにを使用することを提案する傾向があり{}ます。(POSIXユーティリティ構文ガイドラインの#10を参照)。
Charles Duffy

1
余談{} +ですが、コマンドラインで見つかったすべての項目に適合するために必要な{} \;だけ(nukeこの場合)コマンドのインスタンスのみを実行するため、は1つずつではなく、よりもはるかに効率的です。
Charles Duffy

@CharlesDuffy実行された場合find */、問題はで発生しません。-execハイフンのあるディレクトリはfindオプションのように見え、文句を言うでしょう。
Barmar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.