我有一个脚本,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,并替换{}
为找到的文件的名称。\;
这就是你如何结束exec
find 的方式。
您的管道无法工作的原因是 find 的输出是通过 STDIN 提供的individual.sh
,而不是作为参数提供。您的脚本需要知道通过 STDIN 查找输入或参数才能使用它。