此问题在此处已有答案:
Using find to locate files that match one of multiple patterns(12个答案)
两年前关闭了。
我需要将下面的语句简化为一个find
语句。
$ find . -print | grep dir
$ find . -print | grep ch
唯一的提示是给我的是阅读man
页,以管理这样做。我通读了它,并有以下结论,有人能告诉我,如果我正在作出正确的思考,或如果他们可以引导我到一个有用的网站,我可以了解减少管道更多。
尝试在单行中执行此操作:
$ find . -print | grep dir && grep ch
$ find . -print | grep dir , grep ch
或者使用printf。
上述内容是否有意义,或者是否会给予我:* 未找到 *?
2条答案
按热度按时间wgeznvg71#
使用
find
和-name
选项,通过-o
(=逻辑or
)连接,如下所示:1wnzp6jl2#
这两行都使用以下表达式作为输入:
因此,您要做的是将该表达式的计算结果通过管道传递给两个grep调用。
注意:由于短路评估,您需要小心地执行类似于您之前提出的解决方案的操作。即-
只有当expr 1返回True、正数或非空值时,才会对两者求值(因为两个操作数都需要为true,并且返回true)。在您的示例中,您希望每次都对grep dir和grep ch求值,而不管第一个grep是否找到任何内容。
如果expr 1返回True、正值或非空值,则不会计算expr 2(因为或仅需要一个操作数为true即可返回true)
而不是&&或||,使用分号。
这是对两个表达式进行分组的一种简洁方法,其中一个表达式在逻辑上不依赖于另一个表达式的输出。