首先让我描述一下我的情况,我在 Linux 平台上工作并且有一组 .bmp
文件,这些文件将 filename0022.bmp
中的图片编号加一最多 filename0680.bmp
。所以一共658张图片。我希望能够通过对图片进行操作的 .exe 文件运行这些图片中的每一张,然后将文件踢出到用户指定的文件中,它还有一些阈值参数:下限、上限。所以可执行文件的典型调用是:
./filter inputfile outputfile lower upper
有没有一种方法可以让我仅从终端或通过创建某种 bash 脚本来循环调用所有文件?我的问题与此类似:Execute a command over multiple files with a batch file但这次我在 Linux 命令行终端中工作。
最佳答案
您可能有兴趣研究 bash 脚本。
您可以直接从 shell 中执行 for 循环中的命令。
生成您特别提到的数字的简单循环。例如,从 shell 中:
user@machine $ for i in {22..680} ; do
> echo "filename${i}.bmp"
> done
这将为您提供从 filename22.bmp
到 filename680.bmp
的列表。这只是处理您提到的范围的迭代。这不包括零填充数字。为此,您可以使用 printf
。 printf
语法是printf 格式参数
。我们可以使用之前循环中的 $i
变量作为参数,并应用 %Wd
格式,其中 W 是宽度。在 W 占位符前加上前缀将指定要使用的字符。示例:
user@machine $ for i in {22..680} ; do
> echo "filename$(printf '%04d' $i).bmp"
> done
在上面的$()
中作为一个变量,执行命令获取与预定义值相反的值。
现在应该会为您提供您指定的文件名。我们可以将其应用到实际应用中:
user@machine $ for i in {22..680} ; do
> ./filter "filename$(printf '%04d' $i).bmp" lower upper
> done
这可以改写成一行:
user@machine $ for i in {22..680} ; do ./filter "filename$(printf '%04d' $i).bmp" lower upper ; done
问题中需要注意的一点是,.exe 文件通常以 COFF
格式编译,而 linux 需要 ELF
格式的可执行文件。
关于linux - 如何在 Linux 的终端中循环执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005756/