複数のディレクトリにCDを移動してコマンドを実行するスクリプト

複数のディレクトリにCDを移動してコマンドを実行するスクリプト

後で追加できるスクリプトを作成しようとしています。デフォルトでは、私のホームディレクトリはgitリポジトリのコレクションでいっぱいです。その場所のマスターリストを保持してから、すべての場所でスクリプトを実行し、コマンドgit upなどを実行したいと思いますgit 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

ああ、私はbashではなくZSHを使用しています。

答え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リポジトリに変更する必要はありませんgitgit-C path

リポジトリのリストを保持するには、配列を使用することをお勧めします。

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

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

nameとしてスクリプトに入れると、パラメータがpassad withであるため、どのコマンドでも実行multigitできます。たとえば。git$@multigit pull

リポジトリリストの設定に興味がない場合は、zsh次のようにすべてを参照することもできます。

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

**/.git(/N)指定されたディレクトリは再帰的に検索され、.gitパス${repo:h}の最後の要素は削除されます。この場合、.gitストレージパスはそのまま残ります。


Tabボーナス:新しいコマンドを完了することもできます。

compdef '_dispatch git git' multigit

関連情報