首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在find命令的exec参数中使用管道?

如何在find命令的exec参数中使用管道?
EN

Stack Overflow用户
提问于 2008-09-15 09:45:00
回答 5查看 47.1K关注 0票数 78

我正在尝试构造一个find命令来使用两个不同的可执行文件来处理目录中的一堆文件。不幸的是,-exec on find不允许使用管道,甚至不允许使用\|,因为外壳首先解释该字符。

下面是我想要做的事情(这不起作用,因为管道结束了find命令):

代码语言:javascript
运行
复制
find /path/to/jpgs -type f -exec jhead -v {} | grep 123 \; -print
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-15 09:54:10

尝尝这个

代码语言:javascript
运行
复制
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print

或者,您可以尝试将exec语句嵌入到sh脚本中,然后执行以下操作:

代码语言:javascript
运行
复制
find -exec some_script {} \;
票数 88
EN

Stack Overflow用户

发布于 2008-09-15 09:56:31

使用-exec,您只能运行带有某些参数的单个可执行文件,而不能运行任意的外壳命令。为了规避这一点,您可以使用sh -c '<shell command>'

请注意,-exec的使用效率非常低。对于找到的每个文件,必须再次执行该命令。如果你能避免这种情况,效率会更高。(例如,将grep移到-exec之外,或按照Palmin的建议将find的结果通过管道传输到xargs。)

票数 4
EN

Stack Overflow用户

发布于 2011-02-27 11:29:01

对于这种类型的任务,使用find命令可能不是最佳选择。我经常使用以下命令来查找包含所请求信息的文件:

代码语言:javascript
运行
复制
for i in dist/*.jar; do echo ">> $i"; jar -tf "$i" | grep BeanException; done
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档