回答編集履歴

2

追記

2020/06/26 05:51

投稿

otn
otn

スコア84618

test CHANGED
@@ -13,3 +13,55 @@
13
13
  だと、`.git`と`out`自体は表示されると思います。
14
14
 
15
15
  「降りない」ので中のファイルやサブディレクトリは表示されません。
16
+
17
+
18
+
19
+ #追加質問に対して
20
+
21
+ > find . -print ( -name '.git' -o -name 'out' ) -prune の実行結果だと.gitとoutディレクトリを含むが.gitとout下の階層は検索しない結果が返ります。
22
+
23
+ > これはfind . -printの結果を-pruneで絞っているということだと思います。
24
+
25
+
26
+
27
+ これは、まず表示します。その上で、`-prune`の効果で該当ディレクトリの下には降りません。
28
+
29
+
30
+
31
+ > find . ( -name '.git' -o -name 'out' ) -prune -o -print
32
+
33
+ だと、なぜ.gitとoutディレクトリが除かれるのでしょうか。
34
+
35
+
36
+
37
+
38
+
39
+ `man find`より:
40
+
41
+ > expr1 -o expr2
42
+
43
+ > or 結合である。expr1 が真ならば、expr2 は評価されない。
44
+
45
+
46
+
47
+ ということで、指定ディレクトリに該当した場合は、`-print`は評価されません。
48
+
49
+
50
+
51
+ > -o -printの-oの動き方が-name '.git' -o -name 'out'の動き方と異なるように思います。
52
+
53
+
54
+
55
+ も`-o`の効果は一緒です。
56
+
57
+
58
+
59
+ ただし、
60
+
61
+ > 式の中に -prune や -print 以外のアクションがまったく存在しない場合は 、式全体の結果が真になったすべてのファイルに対して -print が実行される。
62
+
63
+
64
+
65
+ という記述があるので、これに該当して、表示されても良いような気はします。
66
+
67
+ 実際、`-print`を`-true`に変えると表示されますね。`-print`も値は真なので同じはずなのですが。

1

訂正

2020/06/26 05:51

投稿

otn
otn

スコア84618

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```sh
8
8
 
9
- find . ( -name '.git' -o -name 'out' ) -prune -o -print
9
+ find . ( -name '.git' -o -name 'out' ) -prune -print -o -print
10
10
 
11
11
  ```
12
12