7

我有一个包含要测试的文件的目录, 比如 fileA和.BC

为了简单起见,假设我有一个要对这些文件中的每一个发出的命令,并找到一个能够为我提供正确输出的命令。

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

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

我发现我的结果

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

这工作正常,打印ExpectedResult

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

A
B
ExpectedResult
C

这样我就可以看到在哪个文件中找到了结果。如果我正要查看grep文件的内容,我需要-printfind. 不幸的是,如果我需要管道命令,这是行不通的。

显然,grep -H也不会这样做,因为它只会说(standard input).

如何覆盖“超出”文件名?以某种方式在stderr上打印它?

我意识到我可以将我的文件名保存在一个变量中,对其进行处理等,但我希望看到一种更简单的方法。

4

2 回答 2

8

一种简单的方法是说:

find . -type f -name "*.so" -exec sh -c "echo {} && readelf -s {} | grep mysymbol" \;
于 2013-09-19T11:39:14.660 回答
3

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

find . -name *.so -print0 | xargs -0 -I % sh -c 'echo % ; myCommand "%" | grep ExpectedResult'
于 2013-09-19T11:45:13.540 回答