执行列表中的所有文件

执行列表中的所有文件

我有一个源代码树,make运行时会生成几个名为“001”、“002”等的可执行文件。我正在尝试编写一个脚本,该脚本将在我的源代码树中找到所有这些可执行文件,然后执行它们。到目前为止我有这个:

find build/ -type f -executable | ack --nocolor "\d{3}$"

其中列出了我想要正确执行的可执行文件。

我的问题是,我该如何运行所有这些?我认为也许xargs和的某种组合exec可以做到这一点,但exec似乎尝试用命令替换当前的 shell,这不是我想要的。

答案1

这可能有效

find build/ -type f  -executable -exec sh -c 'exec "$1"' _ {} \;

或者仅过滤001, 002.. 文件

find build/ -type f -name '*[0-9][0-9][0-9]' -executable  -exec sh -c 'exec "$1"' _ {} \;

答案2

尝试:

$ find build/ -type f -executable | ack --nocolor "\d{3}$" |
while read prog
do
    "$prog"
done

答案3

擅长的事情之一find是选择符合条件的文件,因此您可以使用它来挑选名称由三位数字组成的文件。然后你可以使用这个更简单的形式:

find build -name "[0-9][0-9][0-9]" -type f -executable -exec {} ";"

-regex '.*/\d{3} 如果您能找到合适的方法,-regextype您也许能够使用它。

答案4

find -type f -name '00[123]' -exec env - {} \;

添加您想要为不同可执行文件声明的任何环境。也许2>/dev/null如果存在不可执行的00[123]文件,而您不想听到它。

相关内容