我有一个文件目录testing,说文件A
, B
和C
为了让事情变得简单,让我们假设我有一个命令,我想对每个这些文件发出一个命令,并给出一个合适的输出。
我将需要一个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'