我正在尝试构造一个find命令来使用两个不同的可执行文件来处理目录中的一堆文件。不幸的是,-exec
on find不允许使用管道,甚至不允许使用\|
,因为外壳首先解释该字符。
下面是我想要做的事情(这不起作用,因为管道结束了find命令):
find /path/to/jpgs -type f -exec jhead -v {} | grep 123 \; -print
发布于 2008-09-15 09:54:10
尝尝这个
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print
或者,您可以尝试将exec语句嵌入到sh脚本中,然后执行以下操作:
find -exec some_script {} \;
发布于 2008-09-15 09:56:31
使用-exec
,您只能运行带有某些参数的单个可执行文件,而不能运行任意的外壳命令。为了规避这一点,您可以使用sh -c '<shell command>'
。
请注意,-exec
的使用效率非常低。对于找到的每个文件,必须再次执行该命令。如果你能避免这种情况,效率会更高。(例如,将grep
移到-exec
之外,或按照Palmin的建议将find
的结果通过管道传输到xargs
。)
发布于 2011-02-27 11:29:01
对于这种类型的任务,使用find
命令可能不是最佳选择。我经常使用以下命令来查找包含所请求信息的文件:
for i in dist/*.jar; do echo ">> $i"; jar -tf "$i" | grep BeanException; done
https://stackoverflow.com/questions/62044
复制相似问题