从所有子目录安装软件

从所有子目录安装软件

我对 Ubuntu 有点陌生,我安装它是为了做一个小项目。我提取了大约 30 个包含包的 tar 档案,现在我有很多目录,每个目录都包含源代码和一个configure文件。

如何快速循环遍历所有子目录并在每个子目录中运行配置 shell 脚本?

到目前为止,我已经尝试创建一个 shell 脚本(称为 i.sh)来循环遍历文件夹并运行配置脚本,但无济于事。有什么办法可以纠正吗?我将如何执行它?

find . -type d | while read d; do
    ./configure
    make
    sudo make install
done

我通过进入终端并运行来执行它sudo bash ./i.sh

谢谢你!

答案1

要迭代当前目录中的所有目录,请使用更简单的循环:

for dir in ./*/; do
   # more here
done

该模式./*/将匹配当前目录中的子目录。

使用find在这里很可能会做错误的事情,因为它会在解压的tar档案中找到子目录。

对于每个目录,$dir您想要cd进入该目录并进行构建:

for dir in ./*/; do
    ( cd "$dir" && ./configure && make && sudo make install )
done

括号使命令在子 shell 中运行。子 shell 内的目录更改不会反映到子 shell 外部,因此永远不需要“cd返回”。

&&我用(“和”)将命令串在一起。这意味着如果一个命令失败,后面的命令将根本不会运行。

您不会使用 执行此操作sudo,因为这是可能的唯一步骤可能需要 root 权限是该make install步骤,其前缀已为sudo

/usr/local请注意,这将默认安装下面的所有项目。要安装在另一个安装前缀中,请使用eg --prefix=$HOME/localwith configure(这意味着您不需要sudo 根本不,因为您已经在主目录中具有写入权限)。

相关内容