对从 find 到 commandX 的管道命令感到困惑吗?

对从 find 到 commandX 的管道命令感到困惑吗?

我有一个脚本,run.sh看起来像这样:

#!/bin/bash
FILES=$(find corpus/ -type f)
for i in $FILES
do
    ./individual.sh $i
done

它运行没有问题。

我想通过将每个文件从 find 传输到./individual.

我想我可以这样做:

find corpus/ -type f | ./individual.sh

但在尝试时,它只是通过管道输入文件名为“”的文件(导致错误)。

正确的语法是什么?

答案1

您需要使用 find 的-exec选项:

find corpus/ -type f -exec ./individual.sh {} \;

对于find找到的每个匹配项,它将执行 individual.sh,并替换{}为找到的文件的名称。\;这就是你如何结束execfind 的方式。

您的管道无法工作的原因是 find 的输出是通过 STDIN 提供的individual.sh,而不是作为参数提供。您的脚本需要知道通过 STDIN 查找输入或参数才能使用它。

相关内容