2017-09-07 1 views
0

나는 git 히스토리를 유지하면서 여러 프로젝트와 함께 GitHub 저장소를 별도의 저장소에 분리하는 스크립트를 작성하려고한다. 나는 모든 것을 손으로하는 법을 알고 있지만, 그것을 위해 스크립트를 작성함으로써 시간을 절약하고 싶었다.bash 루프의 폴더 제외

는 여기에 내가 그것을 제외 할 .git 폴더를 포함 제외하고이 꽤 잘 작동 스크립트

#!/bin/bash 
REPO_DIR="C:/Users/Jerred/GitKraken/harding-computer-science/" 

cd "$REPO_DIR" 

for X in "`find . -maxdepth 2 -mindepth 2 -type d`" 
do 
    if [[ "$X" == *"git"* ]]; then 
     echo "NO MATCH: $X" 
     continue; 
    fi 
    echo "$X" 
done 

지금까지

있을거야. 어떤 이유로 든 작동하지 않습니다.

출력

NO MATCH: ./.git/hooks // This is ignored like I want 
./.git/info    // This isn't ignored but it should be 
./.git/logs 
./.git/objects 
./.git/refs 
./COMP 151 - Programming II/Lab 10 Resources 
./COMP 151 - Programming II/Lab 11 Resources 

나는이 필요한 의심하지 않지만, 여기 GitHub의에 repo을합니다.

+1

질문에 대답하지 않지만'find '의'-path' 옵션을 사용하여'.git/*'를 걸러내는 것을 고려 했습니까? '를 추가하십시오! -path ./git/ \ *'를 find 명령에 입력하십시오. –

답변

3

find 명령의 큰 따옴표는 출력을 하나의 단일 문자열 (새 줄이 있음)로 변환합니다. 하나의 X 값이 *"git"*과 일치하도록 반복합니다. 따라서 NO MATCH: 다음에 전체 문자열 (줄 바꿈)을 인쇄하십시오. 증명 : 루프 시작 부분에 echo foobar을 추가하면 한 번만 인쇄됩니다.

당신은 시도 할 수 있습니다 : 당신이합니다 (NO MATCH 출력없이)하고 싶은 일을해야

find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\* 

.

+0

그게 효과가있다. find 명령을 따옴표로 묶어 하나의 문자열을 출력했음을 알지 못했지만 이제는 의미가 있습니다. –