2009-05-21 57 views
0

last question扩大,让我们单独分析的东西。AND运算符如何在FIND命令中工作?

AND-算子,交?

我举一个例子:

$ 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 
+1

至少对于Linux和Solaris以及CygWin,find没有“-f”测试。也许在OSX上。如果没有,这可能是你的问题的一部分。 – Eddie 2009-05-21 23:42:48

回答

1

要在Dave的回答略有扩大:

你似乎想要两个查找命令的交集。 Find不会执行集合操作。查找将遍历(或向上取决于你如何看待它)一组路径,适用的表达它遇到的每个项目。它需要的默认操作是打印它找到的项目的路径,根据表达式计算为true。 (我相信你需要找到一些老版本明确添加-print表达式。)不整理结果。对于路口的分析,您可以使用工具,如差异,那么sdiff,通讯

我假设你正在努力寻找在两个单独的目录名称相同的项目,而不是在子目录。

假设bash,那么你可以这样做

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

我相信,在查找命令 - 和几乎总是多余的。防爆。

find . -type f ! -type d 

相同

find . -type f -and ! -type d 

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

1

- 只能在测试中使用。如果你想找到两个列表的共同元素,你应该这样做

sort all_files > all_files.sorted 
sort right_files > right_files.sorted 
comm -12 all_files right_files > common_files 
+1

所以选项-12意味着取两个文件的交集。无论您将选项编写为-12还是-21,显然无关紧要。 – 2009-05-22 15:21:58

0

与门 - 选项在男子

的-and运算符是逻辑与 操作。因为它是 所暗示的两个表达式的并置,所以它不需要指定 确实 。如果两个表达式均为真,则表达式评估 至 为真。如果第一个表达式为假,则不计算第二个 表达式 。

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

第一句:喜欢和运营商数学。只有两个1s

第二个句子:这表明我不需要使用该命令,正如你可以在戴夫的答案中看到的那样。大! - - 似乎将第一个表达式与-AND和和表达式并置为-AND。 请向我澄清这个希腊语。

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

第四句: repeation:它说,01意味着假

同样的英语:

令p和q是两个表达式用下面的真相valuas

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

哪里1表示为真,而0表示错误。

请注意,手册通常包含多余的描述,有时会出现错误。