我有一个源代码树,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]
文件,而您不想听到它。