查找并执行 bsub < 多个文件

查找并执行 bsub < 多个文件

我打算查找*.lsf当前的内容/subdirectories并执行bsub<*.lsf所有查找文件。我试过:

find ./ -type f -name "*.lsf" -exec bsub < \;

该部分find ./ -type f -name "*.lsf"工作正常。然而,执行部分却出现了问题。

有谁能帮忙解答一下吗?

答案1

你的第一次尝试就已经接近成功了。您需要做的是调用 shell 来解析<重定向运算符

find -name '*.lsf' -exec bash -c 'bsub <"$1"' _ {} \;

但是,这不是很有效,因为您现在正在为每个匹配的文件启动一个 shell。尽可能少地调用 shell 并使用循环一次处理多个文件

find -name '*.lsf' -exec bash -c 'for i in "$@"; do bsub <"$i"; done' _ {} +

这两个都是文件名安全的(即它们处理文件名中的空格和非打印/半打印字符)。

答案2

您可以与xargs

find ./ -type f -name "*.lsf" | xargs bsub

事实上,您可以将孔缩短为:

find *.lsf | xargs bsub

评论:在我使用的集群上进行了测试。

编辑:删除了替换字符串选项和重定向字符。

答案3

xargs以有效的方式使用, 。 (请注意,正如 @KamilMaciorowski 所说,这是不安全的。)

find . -type f -iname "*.lsf" | xargs -I {} bash -c 'cat < {}'

然后修复文件名空间等

find . -type f -iname "*.lsf" -print0 | xargs -0 -I {} bash -c 'cat < {}'

我测试过cat。你必须用你的命令替换

相关内容