Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix AND运算符在FIND命令中是如何工作的?_Unix_Shell_Find - Fatal编程技术网

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

Unix AND运算符在FIND命令中是如何工作的?,unix,shell,find,Unix,Shell,Find,我的问题扩大了,所以让我们分开分析 和操作员,交叉口? 我会举一个例子: $ 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 . | 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

-而且只在测试中有效。如果您想找到这两个列表的公共元素,您应该执行以下操作

sort all_files > all_files.sorted
sort right_files > right_files.sorted
comm -12 all_files right_files > common_files
comm -12 <(find .  -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort)

要稍微扩展Dave的答案:

您似乎希望两个“查找”命令相交。“查找”不执行集合操作。“查找”向下(或向上,具体取决于您的观察方式)遍历一组路径,并将表达式应用于遇到的每个项。它采取的默认操作是打印它找到的项的路径,这些项根据表达式计算为true。(我相信find的一些旧版本要求您显式地添加一个-print表达式。)它没有整理结果。对于交叉点分析,您可以使用diff、sdiff、comm等工具

我假设您试图在两个单独的目录中找到同名的项,而不是在子目录中

假设bash你可以做类似的事情

sort all_files > all_files.sorted
sort right_files > right_files.sorted
comm -12 all_files right_files > common_files
comm -12 <(find .  -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort)

find . -type f -and ! -type d

此外,-f标志是添加到要遍历的路径的选项。我不相信这是一种表达。请使用“man find”进行澄清。

man中的AND-选项

and运算符是逻辑and 操作人员事实上 由两个表达式并置所暗示 做 不必指定。表达式计算 到 如果两个表达式都为true,则为true。第二 表达 如果第一个表达式为false,则不计算

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

第一句:喜欢数学中的AND运算符。仅限两个1

2nd sentente:这表明您不需要使用该命令,如Dave的回答所示。太好了它似乎将第一个表达式与-和to以及不带-和的表达式结合起来请向我澄清这个希腊语。

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

第四句:重复:它说01意味着错误

英文版本相同:

设p和q是两个具有以下真值的表达式

p q pANDq
1 1 1
1 0 0
0 1 0
0 0 0
其中1表示true,而0表示false


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

至少对于Linux、Solaris和CygWin,find没有“-f”测试。也许OSX上有。如果不是,这可能是您的问题的一部分。因此选项-12意味着两个文件相交。显然,将选项写为-12或-21并不重要。