当前位置: 首页 > 面试题库 >

如何包括管道| 在我的linux中找到-exec命令?

萧宏远
2023-03-14
问题内容

这不起作用。可以在查找中完成吗?还是我需要xargs?

find -name 'file_*' -follow -type f -exec zcat {} \| agrep -dEOE 'grep' \;

问题答案:

将管道符号解释为运行多个进程并将一个进程的输出通过管道传递到另一进程的输入的指令是外壳程序的职责(/ bin / sh或等效命令)。

在您的示例中,您可以选择使用顶级外壳执行管道,如下所示:

find -name 'file_*' -follow -type f -exec zcat {} \; | agrep -dEOE 'grep'

就效率而言,此结果花费了find的一次调用,zcat的多次调用和agrep的一次调用。

这将导致仅产生一个agrep进程,该进程将处理zcat多次调用产生的所有输出。

如果出于某种原因您想多次调用agrep,则可以执行以下操作:

find . -name 'file_*' -follow -type f \
    -printf "zcat %p | agrep -dEOE 'grep'\n" | sh

这使用管道来构造命令列表,然后将其发送到新的外壳程序以实际执行。(省略最后的“ | sh”是调试或执行此类命令行的不错的方法。)

就效率而言,此结果花费了find的一次调用,sh的一次调用,zcat的多次调用和agrep的多次调用。

就命令调用次数而言,最有效的解决方案是Paul Tomblin的建议:

find . -name "file_*" -follow -type f -print0 | xargs -0 zcat | agrep -dEOE 'grep'

…花费了find的一次调用,xargs的一次调用,zcat的几次调用和agrep的一次调用。



 类似资料:
  • 问题内容: 有没有办法执行我在Shell中定义的功能?例如: 结果是: 有没有办法让的看? 问题答案: 由于只有外壳程序知道如何运行外壳程序功能,因此您必须运行外壳程序才能运行功能。您还需要用标记要导出的函数,否则子shell将不会继承它们:

  • 本文向大家介绍在linux命令行中找到我的公共IP地址,包括了在linux命令行中找到我的公共IP地址的使用技巧和注意事项,需要的朋友参考一下 IP地址代表Internet协议地址。为设备分配了指定的IP地址,以标识在Internet上连接的设备。公用IP地址可在Internet上路由,通常由ISP(Internet服务提供商)提供,可通过Internet访问。 您知道如何从Linux命令行中找到

  • 问题内容: 我应该把包裹放在哪里,以便可以被另一个包裹导入? 问题答案: 设置您的GOPATH。将软件包foo源放入GOPATH / src / optional-whatever / foo / *。go中,并在代码中使用 你 并不 需要显式地安装foo,那么去工具是一个构建工具,它会做自动的为你需要的时候。

  • 我有两个java文件,(main.java,test.java)在每个文件中我编写了包ADT; 我在main.java内部编写了一个名为ADT的类,在我的test.java中将该类称为ADT。 有人能帮我吗?

  • 问题内容: 我正在使用以下代码来获取系统中正在运行的所有进程的详细信息: 我想用管道符号过滤掉,所以我用这个: 转到ErrorStream。后来我注意到管道符号(|)在Java中用作按位包含或运算符。所以我在管道符号前面使用了反斜杠,如下所示: 但是,它再次进入ErrorStream。如何在Java中执行exec? 问题答案: 管道是shell的功能-您没有使用shell,而是在执行进程()。 但

  • 问题内容: 有人可以在Linux的Bash中发布使用命名管道的简单示例吗? 问题答案: 实际使用命名管道的最好例子之一… 从http://en.wikipedia.org/wiki/Netcat: 另一个有用的行为是用作代理。端口和主机都可以重定向。看这个例子: 端口12345代表请求。 这将在端口12345上启动服务器,并且所有连接都将重定向到。如果网络浏览器向发送了请求,则请求将发送到goog