如何在find中打印文件名,尽pipe处理结果和grep

我有一个文件目录testing,说文件ABC

为了让事情变得简单,让我们假设我有一个命令,我想对每个这些文件发出一个命令,并给出一个合适的输出。

我将需要一个pipe道myCommand fileName | grep ExpectedResult myCommand fileName | grep ExpectedResult (在我的真实情况下,我在库中寻找一个符号,所以它是readelf -s | grep MySymbol )。

我想对find命令的结果发出这个命令。

我find了我的结果

 find . -name *.so -print0 | xargs -0 myCommand | grep ExpectedResult 

这工作正常,打印ExpectedResult

我想要收到的是(假设我查找的文件是B ):

 A B ExpectedResult C 

这样我可以看到在哪个文件中find了结果。 如果我只是想要grep的文件的内容,我会需要find一个-print开关。 不幸的是,如果我需要pipe道命令,这是不行的。

显然, grep -H也不行,因为它只会说(standard input)

我怎样才能覆盖“outgrepping”的文件名? 以某种方式打印在stderr上?

我意识到我可以将我的文件名保存在一个variables中,处理它等,但我很想看到一个更简单的方法。

一个简单的方法就是说:

 find . -type f -name "*.so" -exec sh -c "echo {} && readelf -s {} | grep mysymbol" \; 

我相信你想要这样的东西:

 find . -name *.so -print0 | xargs -0 -I % sh -c 'echo % ; myCommand "%" | grep ExpectedResult'