对 Bash 中的字符串列表执行命令

Execute a command on a list of strings in Bash

我正在尝试从给定目录中查找所有 C# 接口。我尝试执行此命令:

find . -type f | xargs basename | grep ^I

但是 basename 返回了一个错误,因为我向它发送了一个字符串列表,而不是字符串本身。如何让 basename 的输出在所有通过管道传递给它的字符串上执行?

使用xargs -i应该可以解决问题:

find . -type f | xargs -i basename "{}" | grep ^I

您不需要为此使用 xargs。您可以使用:

find . -type f -name 'I*' -exec basename '{}' ';'

如果您使用的是 GNU find,则您也不需要 basename

find . -type f -name 'I*' -printf %f\n

这里,%f 是 "filename with all but the last component removed" 的 GNU find printf 格式。还有许多其他可能的格式代码;有关详细信息,请参阅 man find