gpt4 book ai didi

linux - 如何在 Linux 的终端中循环执行命令?

转载 作者:IT王子 更新时间:2023-10-29 00:26:07 27 4
gpt4 key购买 nike

首先让我描述一下我的情况,我在 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.bmpfilename680.bmp 的列表。这只是处理您提到的范围的迭代。这不包括零填充数字。为此,您可以使用 printfprintf 语法是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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com