我有一个包含以下文件和.git
目录的目录,例如
.
├── .git
│ ├── branches
│ ├── COMMIT_EDITMSG
│ ├── packed-refs
│ └── refs
├── readme.md
├── server_build.sh
└── tags
如果我find
通过测试运行 GNU 命令-prune
,find
则会打印 'd 的目录prune
:
% find . -name '.git' -prune
./.git
如果添加另一个 OR 选项,则被修剪的目录不再出现在输出中:
% find . -name '.git' -prune -o -name '*.md' -print
./readme.md
在这种情况下,-name '.git'
和-name '*.md'
测试都必须返回 true,添加另一个 OR 测试不可能突然使测试-name '.git' -prune
不真实。
第一个语句中是否添加了一些隐式 switch?
换句话说就是找到转弯
find . -name '.git' -prune
进入
find . -name '.git' -prune -print
在运行时?-print
当添加下一个测试时,隐式被取消?当应用另一个“-or”测试时,
为什么不打印 -pruned 目录?find
答案1
find . -name '.git' -prune
是相同的
find . -name '.git' -prune -print
所以它会修剪然后打印
find . -name '.git' -prune -o -name '*.md' -print
是相同的
find . \( -name '.git' -prune -true \) -o \( -name '*.md' -print \)
所以它执行第一个子句,如果它执行修剪,那么它执行 true (修剪返回 true),并且不执行右侧-o
这些将始终打印
find . \( -name '.git' -prune -o -name '*.md' \) -print
find . -name '.git' -prune -print -o -name '*.md' -print