我对 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/local
with configure
(这意味着您不需要sudo
根本不,因为您已经在主目录中具有写入权限)。