2011-08-01 16 views
3

findの-pruneが正しく動作していないことがわかります。私は-name "efence*" -pruneオプションは、名前がefence*のものを除いてすべてのファイルを選択(または検索)する必要があると思いますか?findの-pruneオプションは何をしますか?

私の理解に間違っていますか?

私が実行されたコマンド: find * -maxdepth 0 -name "efence*" -prune

期待:名前* efenceと1以外カレントディレクトリ(maxdepth 0)で、すべてのファイルを選択します。

ことは私が試してみてください-prune

+0

私は[Super User](http://superuser.com/)でより良い回答を得ることができます。 – Pindatjuh

+0

どのように移行できますか?または、管理者に移行させますか? – kingsmasher1

+0

はい、管理者によって移行されます。 – Pindatjuh

答えて

6

理解するのに役立ちます

find * -maxdepth 0 -name "efence*" -prune -o -print 

pruneオプション他のオプションが指定されていない場合は、一致するファイルをプリントが(それはまだしかし、一致するディレクトリに再帰からfindを防止してい)。

編集は、説明を追加します。

find式はtestsactions区別。

式はオプションで構成された(全体の動作 ではなく、特定のファイルの処理に影響を与える、と常にtrueを返す)され、(真または偽の値を返す) テスト、および:man findからアクション(副作用は であり、真または偽の値を返します)はすべて演算子で区切ります。演算子を省略した場合は-andとします。

式に-prune以外のアクションが含まれていない場合は、式が真であるすべてのファイルに対して-printが実行されます。 [私の強調]

だから-prunefindは(あなたのケースでは、-maxdepth 0 -name "efence*")前のテストを一致させるサブディレクトリに再帰的ではないだろうという副作用があるアクションです。しかし、式の真理値で、それだけで

find * -maxdepth 0 -name "efence*" -true 

を持つと同等だとあなたはそれを入力することができますよう(この仮定が常に存在している-printが想定され、他のアクションを指定していないので、例えば、find . -name "*.java" -printの代わりにfind . -name "*.java")。

希望は意味があります。 the other threadで受け入れられた答えは、同じことについて話しています。

+0

うわー、それは働いた! '-o print'はどのように魔法をしますか? – kingsmasher1

+0

私はあなたの答えを受け入れていますが、 '-o print'がその魔法をどのようにしているのかを教えてください。 – kingsmasher1

関連する問題