findコマンドのOR

findコマンドにORやANDがあることを知りました。これ、使える。
例えば、カレントディレクトリ以下のディレクトリで、pictureというディレクトリのサブディレクトリではないディレクトリのみを列挙したいときは、こう書けばOKです。

find . -path '*/picture/' -prune -o -type d -print

findコマンドでは、ORを意味するのが"-o"なので、この例で書いたものは、"-path '*/piture' -prune" と "-type d -print"の二つの条件に分けられます。前者は、パスにpictureを含む場合はそれ以降のディレクトリの降下をやめるという意味で、後者は、ディレクトリのみを出力するという意味です。ORなので、当然前者が真の場合は後者は実行されず、逆に前者が偽の場合のみ後者が実行されるため、目的の動作を行うことができるってわけです。
ちなみに、grepと組み合わせれば

find . -type d |grep -v "/picture/"

でも同様の結果を得ることができますが、当然ながらfind一つでやったほうが断然速いです。UNIXコマンドは素敵すぎます。データ打ちの僕には欠かせない。