2012-08-31 7 views
1

고려하십시오. test이라는 폴더에 많은 쉘 스크립트가 있습니다. 하나의 특정 파일을 제외한 모든 파일을 실행하려고합니다. 나는 무엇을해야합니까? 수동으로 다른 파일을 재배치하거나 파일을 실행하는 것은 옵션이 아닙니다. 내가 한 줄로 할 수있는 방법이 있나. 아니면 모든 파일을 실행하는 sh path/to/test/*.sh에 뭔가를 추가 하시겠습니까?명령 줄 : 와일드 카드를 사용하는 동안 특정 파일을 무시하십시오.

shopt -s extglob 
for file in test/!(do-not-run).sh; do 
    sh "$file" 
done 
+0

는 내가 제외한 모든 파일을 포함 할 의미합니까? –

답변

4
for file in test/*; do 
    [ "$file" != "test/do-not-run.sh" ] && sh "$file" 
done 

당신이 bash를 사용하는 경우, 당신은 원치 않는 스크립트를 건너 뛸 패턴을 확장 사용할 수 있습니다 .sh (-name "* .sh")에 있고 원치 않는 패턴 (\! -name $ pattern_for_unwanted_scripts)과 일치하지 않습니다.

+0

extglob 사용을 위해 +1 : – plundra

1
for FILE in `ls "$YOURPATH"` ; do 
    test "$FILE" != "do-not-run.sh" && sh "$YOURPATH/$FILE"; 
done 
+0

공백을 포함하는 경로가 있으면'ls'의 출력을 구문 분석 할 수 없습니다. – chepner

1

find path/to/test -name "*.sh" \! -name $pattern_for_unwanted_scripts -exec {} \;

찾기가 반복적으로 끝나는 디렉토리에있는 모든 항목을 실행합니다 :

0

bash에서 제공됩니다. shopt -s extglob을 제공하는 경우 !(pattern-list)을 사용하여 주어진 패턴 중 하나를 제외하고 사용할 수있는 "확장 된 globbing"을 사용할 수 있습니다. 귀하의 경우에는

:

shopt -s extglob 
for f in !(do-not-run.sh); do if [ "${f##*.}" == "sh" ]; then sh $f; fi; done 
+0

"do-not-run.sh"가 아닌 모든 파일과 일치합니다. – chepner

+0

네, 맞습니다.'.sh suffix'에 테스트를 추가했습니다 –

+0

아니면 네거티브 패턴에서 확장을 옮깁니다 :'! (do-not-run) .sh'는 "do -not-run.sh " –

관련 문제