주어진 접두사보다 큰/다음에 어휘적으로 나타나는 파일 나열(또는 올바른 순서로 데이터베이스 업그레이드 스크립트 실행)

주어진 접두사보다 큰/다음에 어휘적으로 나타나는 파일 나열(또는 올바른 순서로 데이터베이스 업그레이드 스크립트 실행)

여러 SQL 스크립트를 실행하는 셸 스크립트를 만들려고 합니다.

다음 파일이 있습니다.

$ ls 업그레이드/
01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql

현재 데이터베이스의 버전이 있습니다.DB_VERSION=02

이제 $DB_VERSION보다 큰 접두사가 있는 파일을 쉽게 반복하고 전역화하여 순차적으로 실행할 수 있는 방법은 무엇입니까?

즉 나는 하고 싶다

f를 위해 ????;
   MySQL < $f
완벽한

그리고 DB_VERSION=02인 경우 03-foo1.sqland를 차례로 실행한다.04-buz.sql

답변1

기본 설정:touch 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql 09-quux.sql 10-lala.sql 99-omg.sql

실제 코드:curr=02; for file in ??-*.sql; do ver="${file:0:2}"; [ "$ver" -gt "$curr" ] && echo "$file"; done

즉, 현재 버전을 로 정의한 02다음 모든 파일(와일드카드가 포함된 알파벳순)을 살펴보고 숫자 접두사가 숫자상 더 큰 경우 실행합니다. 교체 mysql(또는 무엇을 가지고 있습니까) echo.

답변2

zsh에서:

DB_VERSION=02
glob="<$((DB_VERSION+1))->"
for x in $~glob-*; do mysql <$x; done

이것<LOW-UP> 글로벌 운영자정수 범위와 일치합니다. 계산 결과가 아닌 리터럴 정수만 사용할 수 있습니다. 따라서 먼저 매개변수 값으로 glob 패턴을 만든 다음 해당 매개변수를 glob 패턴으로 사용합니다.~ 매개변수 확장 옵션.

관련 정보