关于bash:将文件名作为参数传递给函数的脚本

Script that pass file names as arguments to function

本问题已经有最佳答案,请猛点这里访问。

我有一个名为threshold的程序。我在一个名为images的目录中有一组映像。

1
2
3
4
5
6
7
8
|-- images
|   -----img_1.jpg
|   -----img_2.jpg
|   -----img_3.jpg
|   ------
|   ------img_n.jpeg
|-- threshold.exe
|-- myscript

如何编写bash脚本,以便它接受目录名作为参数,并将目录中的每个文件单独作为参数传递给程序threshold.exe。

如果我执行,

1
$./myscript images

最后的执行应该是这样的。

./threshold.exe img_1.jpg./threshold.exe img_2.jpg........./threshold.exe img_n.jpg


假设您在Windows环境中。

1
forfiles /p %1 /m *.jpg /c"cmd /c threshold.exe @file"

-对于路径(/p中的每个文件)%1

-其中%1是传递的参数,即要搜索的文件夹

-运行命令(/ccmd /c threshold.exe @file)

-其中@file表示JPG文件的路径


1
2
3
4
5
6
#!/bin/bash
for dir; do
  for f in"$dir"/*; do
    ./threshold.exe"$f"
  done
done

其行为如下:

  • 首先,迭代命令行参数,将每个参数视为一个目录。
  • 接下来,迭代当前目录中的文件
  • 然后,调用每个文件的可执行文件

请注意,这将是./threshold.exe images/img_1.jpg的形式,而不是./threshold img_1.jpg的形式——这是必要的,以便我们从实际包含threshold.exe的目录运行./threshold.exe,并且仍然提供有效的文件相对路径。