1

我的最后一个问题扩展了,所以让我们分开分析。

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
4

3 回答 3

1

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

sort all_files > all_files.sorted
sort right_files > right_files.sorted
comm -12 all_files right_files > common_files
于 2009-05-21T23:19:41.313 回答
1

稍微扩展戴夫的回答:

您似乎想要两个查找命令的交集。Find 不做集合操作。Find 向下(或向上,取决于您如何看待)一组路径遍历,并将表达式应用于它遇到的每个项目。它采取的默认操作是打印它找到的针对表达式评估为 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 标志是添加到要遍历的路径的选项。我不相信这是一种表达。请“人查找”进行澄清。

于 2009-05-21T23:35:31.033 回答
0

man 中的 AND 选项

-and 运算符是逻辑 AND 运算符。由于两个表达式的并列暗示了它,因此不必指定它。如果两个表达式都为真,则表达式的计算结果为真。如果第一个表达式为假,则不计算第二个表达式。

手册的这一部分对我来说相当神秘。不过,我们来分析一下。

第 1 句:像数学中的 AND 运算符。只有两个两个1

第二句:这表明您不需要使用该命令,正如您在 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 表示正确,而 0 表示错误。

请注意,这些手册通常包含多余的描述,有时还包含错误。

于 2009-05-22T15:35:04.003 回答