如何在 Linux 中运行目录中的所有脚本

前几天,我一直在测试一些我为好玩而创建的基本 shell 脚本。 由于我是 shell 脚本的新手,所以我一一运行和测试脚本。 如果只有几个脚本也没关系。 随着脚本数量的增加,我发现测试所有脚本有点费时。 经过一番网络搜索,我找到了几种方法可以在 Linux 中一个接一个地运行目录中的所有脚本。

在 Linux 中运行一个目录中的所有脚本

我的 Documents 目录中有几个脚本。

$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh

它们都是简单的单行 shell 脚本,在标准输出中使用“echo”命令显示给定的字符串。

在我知道我们可以运行文件夹中的所有脚本之前,我通常会让脚本可执行,例如:

$ chmod +x script.sh

然后我使用命令运行它:

$ ./script.sh

或者,

$ sh script.sh

同样,我使第二个脚本可执行并运行它,依此类推。

好吧,有一个更好的方法可以做到这一点。 我们可以使用以下命令运行目录或路径中的所有脚本 “运行部件” 命令。 run-parts 命令用于在目录或路径中运行脚本或程序。

$ run-parts <directory-path>

run-parts 命令的一个缺点是它不会执行所有脚本。 只有当您的脚本具有正确的名称时,它才会起作用。 名称必须完全由 ASCII 大写和小写字母、ASCII 数字、ASCII 下划线和 ASCII 减号连字符组成。

为了解决这个命名问题,我们可以使用 正则表达式 选项。 例如,以下命令将查找并运行目录中的所有脚本文件 ~/文件 以字母“s”开头并以“sh”扩展名结尾的目录:

$ run-parts --regex '^s.*sh$' ~/Documents

在 Linux 中使用 run-parts 命令运行目录中的所有脚本

故障排除:

如果您遇到如下错误;

run-parts: failed to exec Documents/script1.sh: Exec format error

请参阅以下指南进行修复。

  • 使用 run-parts 命令运行脚本时修复“执行格式错误”

同样,要运行 Documents 目录中所有以 .sh 结尾的脚本文件,请运行:

$ run-parts --regex '.*sh$' ~/Documents

要打印 Documents 目录中以字母 ‘s’ 开头并以 ‘sh’ 扩展名结尾的所有文件的名称,请运行:

$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh

此命令只会打印脚本文件的名称,但不会执行它们。

要列出 Documents 目录中所有以 .sh 结尾的文件,请运行:

$ run-parts --list --regex '.*sh$' Documents Documents/linux.sh Documents/ostechnix.sh Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh

run-parts 命令主要用于 定时任务 并且对于手动使用不可靠。

另一种避免处理重命名脚本以适应的方法 运行部件的 命名结构,可以使用 寻找 或者 for 循环 命令。

查找并运行所有以字母开头的脚本文件 “s” 在 ~/Documents 文件夹中,运行:

$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} ;

如果要运行给定目录及其所有子目录中的所有脚本,请删除 最大深度 上述命令中的选项:

$ find ~/Documents -type f -executable -name 's*' -exec {} ;

运行所有以扩展名结尾的脚本 “.sh”, 跑:

$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} ;