2011-08-05 7 views
5

私は、-print0を使用して、改行の代わりにNULLターミネータを使用するfindの出力を変更しています。しかし、私はfindの-o(OR)関数を使用しているときにこれを動作させることはできません。findで-oと-print0を使用する

これは罰金、それがいずれかのユーザが所有していないファイルの改行区切りのリストを出力「ピーター」ORないグループが所有する「WWW-データの作品:

find . ! -user pieter -o ! -group www-data 

しかし、私は追加しますこれに-print0私はもう何も出力を取得していない:

find . ! -user pieter -o ! -group www-data -print0 

しかし、これは正常に動作します:

find . ! -user pieter -print0 

私は何をしていますmは発行?私はカッコのペアのさまざまなプレースメントを追加しようとしましたが、無駄です。

+0

これはうまくいくと思いますが、テストされていません: 'find。 \(!-user pieter -o!-group www-data \)-print0' –

答えて

7

あなたには括弧がありません。あなたは、特に実施例のセクションで、on its man pageを見つけることについての詳細を調べることができます

find . \(! -user pieter -o ! -group www-data \) -print0 

:あなたはシェルが上にそれらを渡すように、それらをエスケープする必要があることに注意してください。

理由が不明な場合は、order of operationsが原因です。 findの各式はtrueまたはfalseを返します。式の間に明示的な演算子(-a,-oまたは,)を入れない場合は、-aとみなされます。

元のコマンドはfind . ! -user pieter -o ! -group www-data -a -print0に相当し、ユーザーpieterが所有するファイルのprint0のみを評価しますが、グループwww-dataは評価しません。

+0

素晴らしい!これは機能します。今は条件をまとめてあなたの解決策を見ています。 – pfrenssen

関連する問題