如何将大量命令行参数传递给C ++程序

时间:2017-07-10 08:33:18

标签: bash shell

我在Ubuntu 16.04中使用OpenCV 3.2来拼接机载扫描图像。我使用的示例软件接受图像作为命令行参数,因此为了将两个图像拼接在一起,我执行以下操作:

./main image1.jpg image2.jpg

我的问题是我总共要缝合96张图像。我是否需要单独输入这些图像,还是有办法将文件夹中包含的所有文件作为命令行输入到C ++程序?

我无法向Google提供合适的答案,所以我决定在这里问一下。

2 个答案:

答案 0 :(得分:1)

您可以输入

来使用shell文件名扩展
./main image*.jpg

image*.jpg将由shell扩展为以“image”开头的所有jpeg文件,类似于ls image*.jpg

因此,如果您有96个名为imageXX.jpg的文件,您的主程序将在命令行上接收所有96个文件。

答案 1 :(得分:1)

您可以使用此bash脚本

#!/bin/bash

dir_path=$1

if [ $# = 1 ]; then

    if [ -d "${dir_path}" ] ; then

        echo "$dir_path exists and is a directory";
    else
        echo "$dir_path is not a directory";
        exit 1
    fi 
else
    echo "Need one argument = directory";
    exit 1
fi

echo "Process all files";

image_names=" ";

# concat all .jpg files in directory
FILES="$dir_path/*.jpg"
for f in $FILES
do
  # echo "Processing $f file..."
  image_names+=" $f"
done

echo "run ./main $image_names";

exec "./main $image_names";

将其另存为" runAllFiles.bash"在包含" ./ main"的目录中 然后在此目录中打开一个终端并编写命令行

bash runAllFiles.bash myfolder

在哪里" myfolder"是images.jpg

的文件夹路径