shell scriptやコマンドを学び初めた初心者です。
terminalでzsh 5.8 (x86_64-apple-darwin19.3.0)を使っています。
findを使って.gitディレクトリ
とoutディレクトリ
を除外した検索結果を表示したい場合、以下のように書けると調べてわかりました。
find . ( -name '.git' -o -name 'out' ) -prune -o -print
これは
条件1 -prune -o 条件2 -print
は
条件1に合致したら何も行わない(ディレクトリの場合その中に降りない)」「条件2に合致したら出力する」
ということだと調べてわかりました。
ですが、man findで見ると以下が出てきます。
prune This primary always evaluates to true. It causes find to not descend into the current file.
-prune
は該当するディレクトリに降りない、ということのはずですが、除外するという機能はどこに出てきているのでしょうか。orは条件式で言うところの'||'に該当する「または」だと思いますが-printを指定してしまうと結局すべて出るのが正しいと思います。ピンと来なくて気持ち悪いです。
どういうロジックで動いているのでしょうか。
追記 2020/06/26 12:56
find . -print ( -name '.git' -o -name 'out' ) -prune の実行結果だと.git
とout
ディレクトリを含むが.git
とout
下の階層は検索しない結果が返ります。
これはfind . -printの結果を-pruneで絞っているということだと思います。
find . ( -name '.git' -o -name 'out' ) -prune -o -print
だと、なぜ.git
とout
ディレクトリが除かれるのでしょうか。
-o -print
の-o
の動き方が-name '.git' -o -name 'out'
の動き方と異なるように思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/26 06:55 編集