我可以看到-prune find无法正常工作.我猜-name "efence*" -prune选项应该选择(或找到)除了名称efence*正确的文件之外的所有文件?
或者我的理解是错的?
我执行的命令:
find * -maxdepth 0 -name "efence*" -prune
期望:选择当前目录(maxdepth 0)中的所有文件,但名称为*efence的文件除外.
请帮我理解 -prune
尝试
find * -maxdepth 0 -name "efence*" -prune -o -print
Run Code Online (Sandbox Code Playgroud)
如果没有指定其他选项,则该prune选项会打印匹配文件(但仍然会阻止find递归到匹配的目录中).
编辑添加说明:
find表达区分tests和actions.来自man find:
表达式由选项组成(影响整体操作而不是特定文件的处理,并始终返回true),测试(返回true或false值)和操作(具有副作用并返回true或假值),全部由运算符分隔.
-and假设省略了运算符.如果表达式包含比其他任何动作
-prune,
因此-prune,具有副作用的动作find不会递归到与前面的测试匹配的子目录(在您的情况下-maxdepth 0 -name "efence*").但就表达式的真值而言,它只相当于拥有
find * -maxdepth 0 -name "efence*" -true
Run Code Online (Sandbox Code Playgroud)
并且由于您未指定任何其他操作,-print因此假设(此假设始终存在,因为它允许您键入例如find . -name "*.java"而不是find . -name "*.java" -print).
希望有道理.在另一个线程中接受的答案谈到同样的事情.
| 归档时间: |
|
| 查看次数: |
17832 次 |
| 最近记录: |