여러 디렉터리로 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 저장소로 변경할 필요는 없습니다 git.git-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

관련 정보