[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:51238] Re: find expression -or



並木といいます。

From: Hiroki Kashiwazaki <reo@xxxxxxxxxxxxxxxxx>
Subject: [debian-users:51237] find expression -or
Date: Fri, 14 Nov 2008 19:10:07 +0900

> あるユーザ,あるいはあるグループの所有になっているファイル一覧を
> 取得するために以下のようなコマンドを実行しました.
> 
> % find ./ -user hoge -o -group fuga -print
> 
> しかしその結果として現れたのは「user が hoge ではなく,かつ,
> group が fuga であるもの」でした.
(中略)
> これは find の -o オプションとして正しい挙動なのでしょうか.もし正しい
> 挙動ということであれば,どうにもよく理解できないので解説していただける
> と幸いです.

以下のように解釈しますと、「正しい挙動」と考えることができるのではない
でしょうか。

man find しますと、

  評価式は左から右に向って優先順位の高いものから評価する

とあります。で、評価の優先順位は -o より -a (つまり並べただけ) の方が高
いとも書いてありますので、

-user hoge -o -group fuga -print

は、

-user hoge -o \(-group fuga -print\)

と同値ということになると思います。

つまり user が hoge で真になったら、後の方は評価されません。user が
hoge でないファイルになって初めて group が fuga かどうかを評価し、fuga
なら -print が評価されると。

なお、

   -prune 以外のアクションが評価式に含まれていない場合は、評価式の結果
    が真となったファイルに対して、-print が実行される

とありますので、 -print を付けずに

% find ./ -user hoge -o -group fuga 

とすれば、期待通りの動作をしたものと思われます。

---
NAMIKI