cd 到多个目录并执行命令的脚本

cd 到多个目录并执行命令的脚本

我正在尝试编写一个可以稍后添加的脚本。基本上,我的主目录中遍布着 git 存储库的集合。我想保留它们位置的主列表,然后让脚本运行所有这些位置并运行命令git upgit pull其他内容。

我厌倦了必须cd单独处理所有事情才能更新。我想一次性完成这一切,但它们的位置没有任何押韵或原因,而且我不希望仅仅为了适应某些脚本操作而重组我的主文件夹树。

我非常高兴拥有一个像配置文件一样的配置文件,随着时间的推移,我可以根据需要将更多目录附加到文件的开头。

编辑:

这就是我所在的地方:

CWD="$(pwd)";
cd ;
dir1="$HOME/FW/foo";
dir2="$HOME/FW/bar";


for repo in $dir1, $dir2;
do 
  cd "$repo"
  git up  
done
cd $CWD

哦,我使用的是 ZSH,而不是 bash...

答案1

#!/bin/bash
# This will attempt to do a `git pull` in any directories found in the
# present working directory.

for d in *; do
    if [[ -d "$d"/.git ]]; then
        ( cd $d; git pull )
    fi
done

答案2

实际上,您不必将目录更改为 git 存储库即可使用git.您可以将工作目录传递git-C path.

如果您想保留存储库列表,我建议使用数组:

repos=(
$HOME/somedir/repo1
"$HOME/somedir/with space/repo2"
)

for repo in $repos; do
    git -C $repo $@
done

如果将其放入脚本中,例如使用 tha name multigit,则可以git对其运行任何命令,因为参数是 passad withing $@。例如multigit pull

如果您不关心配置存储库列表,您甚至可以zsh为您找到所有它们:

for repo in **/.git(/N); do
    git -C ${repo:h} $@
done

**/.git(/N)将递归搜索任何指定的目录.git,并${repo:h}删除路径的最后一个元素,在本例中.git,为您留下存储库的路径。


奖励:您甚至可以获得Tab新命令的 -completion:

compdef '_dispatch git git' multigit

相关内容