AND运算符如何在FIND命令中工作?

时间:2009-05-21 23:14:51

标签: unix shell find

我的last question已展开,所以让我们分别分析一下。

AND-operater,Intersection?

我举一个例子:

$ find . | awk -F"/" '{ print $2 }'

.zcompdump
.zshrc
.zshrc_copy
.zshrc_somequy
.bashrc
.emacs

$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }'

.bashrc
.emacs
.gdbinit
.git
.profile

当我将输出保存到单独的列表时,我无法理解为什么命令不采用常见的东西:

find -f all_files -and -f right_files .

我只想:

.bashrc
.emacs

3 个答案:

答案 0 :(得分:1)

- 仅适用于测试。如果你想找到两个列表的共同元素,你应该做类似

的事情
sort all_files > all_files.sorted
sort right_files > right_files.sorted
comm -12 all_files right_files > common_files

答案 1 :(得分:1)

略微扩展戴夫的回答:

您似乎想要两个查找命令的交集。查找不做集合操作。查找遍历(或向上取决于您如何看待它)一组路径并将表达式应用于它遇到的每个项目。它所采取的默认操作是打印它找到的项目的路径,该路径根据表达式求值为true。 (我相信一些旧版本的find需要您明确添加-print表达式。)它不会整理结果。对于交叉点分析,您可以使用 diff,sdiff,comm 等工具。

我假设你试图在两个单独的目录中找到具有相同名称的项目,而不是在子目录中。

假设bash你可以做类似

的事情
comm -12 <(find .  -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort)

我相信-and in find命令几乎总是多余的。实施例

find . -type f ! -type d 

相同
find . -type f -and ! -type d

-f标志也是一个添加到遍历路径的选项。我不相信这是一种表达。请'找到'澄清。

答案 2 :(得分:0)

男人的选择

  

-and运算符是逻辑AND   运营商。原样                        由两个表达式并列所暗示   不                        不必指定。表达式评估   至                        如果两个表达式都为真,则为true第二   表达                        如果第一个表达式为false,则不进行评估。

本手册的这一部分对我来说相当神秘。但是,让我们分析一下。

第一句:和Math中的AND运算符一样。只有两个1只

2nd sentente:这表明你不需要使用命令,正如你在Dave的回答中看到的那样。大! - - 似乎将第一个表达式与-AND并置于没有-AND的表达式中。 请向我澄清这个希腊语。

第3句:重复:第1句中用“逻辑”一词表示相同。

第4句:重复:它表示01表示错误

同样的英文:

令p和q为具有以下真值的两个表达式

p q pANDq
1 1 1
1 0 0
0 1 0
0 0 0

其中1表示true,而0表示错误。

请注意,手册通常包含多余的描述,有时甚至是错误。