shell script & batch - 특정 폴더 내 파일 순차 실행


#!/bin/bash

echo "*************************************************"
echo ""
echo "            UPDATE ADMIN SCHEMA"
echo ""
echo "*************************************************"

echo "[`date +'%Y-%m-%d %H:%M:%S'`] Start"  2>&1 | tee --append updateSchema.log


lib_path="../lib"
src_sqltool_jar="${lib_path}/sqltool-2.0.0.jar"
src_hsqldb_jar="${lib_path}/hsqldb-2.3.1.jar"
target_sqltool_jar="./sqltool.jar"
target_hsqldb_jar="./hsqldb.jar"
jar_count=`ls 2>/dev/null | grep '\.jar$' | wc -l`


if test $jar_count -eq 0
then
        echo "Setup..."

        echo "Copy Jar File"
        echo "${src_sqltool_jar} -> ${target_sqltool_jar}"
        cp ${src_sqltool_jar} ${target_sqltool_jar}
        echo "${src_hsqldb_jar} -> ${target_hsqldb_jar}"
        cp ${src_hsqldb_jar} ${target_hsqldb_jar}
fi

rc=./sqltool.rc
target=../classes/script/sql/hsql/update
files=${target}/*.sql
count=`ls ../classes/script/sql/hsql/update 2>/dev/null | grep '\.sql$' | wc -l`

if test $count -eq 0
then
        echo "[`date +'%Y-%m-%d %H:%M:%S'`] not exist update sql" 2>&1 | tee --append updateSchema.log
else
        for f in $files
        do
                echo "Execute Sql : $f" 2>&1 | tee --append updateSchema.log
                java -Dfile.encoding=UTF-8  -jar ${target_sqltool_jar} --debug --autoCommit --rcfile ${rc} admin ${f} 2>&1 | tee --append updateSchema.log

                echo "Move File ${f} -> ${f}.done"
                mv $f $f".done"
        done
fi
echo "[`date +'%Y-%m-%d %H:%M:%S'`] Finish" 2>&1 | tee --append updateSchema.log



  1. 파일 출력 및 화면 출력 동시 처리
    • command 2>&1 | tee --append <filename>
  2. 특정 폴더 내 파일 개수
    • count=`ls ../classes/script/sql/hsql/update 2>/dev/null | grep '\.sql$' | wc -l`
  3. 특정 폴더 내 파일을 Array로 가져오기
    • files=${target}/*.sql
  4. 데이트 포맷 YYYY-MM-DD HH-MM-SS
    • `date +'%Y-%m-%d %H:%M:%S'`

=_=; 또 까먹고 또 찾고 만들겠지만...일단 정리


헉...배치 파일 까지 만들라는 요청이 있어 =_=;
동일한 로직으로 작성 ㅠㅠ


@echo off
PUSHD %~DP0

set log_file=.\updateSchema.log

echo *************************************************
echo *                                               *
echo *            UPDATE ADMIN SCHEMA                *
echo *                                               *
echo *************************************************

set str=[%date% %time%] Start
call:printAndLog "%str%", "%log_file%"

set lib_path=..\lib
set src_sqltool_jar=%lib_path%\sqltool-2.0.0.jar
set src_hsqldb_jar=%lib_path%\hsqldb-2.3.1.jar
set target_sqltool_jar=.\sqltool.jar
set target_hsqldb_jar=.\hsqldb.jar

if exist *.jar goto JAR_COPY_DONE
echo Setup...
echo Copy Jar File
echo Copy "%src_sqltool_jar%" To "%target_sqltool_jar%"
copy %src_sqltool_jar% %target_sqltool_jar%
echo Copy "%src_hsqldb_jar%" To "%target_hsqldb_jar%"
copy %src_hsqldb_jar% %target_hsqldb_jar%

:JAR_COPY_DONE
set rc=.\sqltool.rc
set target=..\classes\script\sql\hsql\update
set file_format=*.sql
if not exist %target%\%file_format% (call:printAndLog "[%date% %time%] Not exist SqlFile","%log_file%" & goto END)
for /f "tokens=1,2 delims=," %%A in ('forfiles /P %target% /M %file_format% /C "cmd /c echo @path,@file"') do call:runSql "%%~A", "%%~B"

:END
set str=[%date% %time%] Finish
call:printAndLog "%str%" "%log_file%"
pause
goto:eof

:printAndLog
echo %~1
echo %~1 >> %~2
goto:eof

:runSql
set sqlPath=%~1
set sqlFile=%~2
set sqlPath=%sqlPath: =%
set sqlFile=%sqlFile: =%

call:printAndLog "[%date% %time%] Execute Sql : %sqlPath%", %log_file%
call java -Dfile.encoding=UTF-8  -jar %target_sqltool_jar% --debug --autoCommit --rcfile %rc% admin %sqlPath%
if errorlevel 1 call:printAndLog "[%date% %time%] Failed run script [%sqlPath%]", %log_file%
echo move %sqlFile% to %sqlFile%.done
rename %sqlPath% %sqlFile%.done
goto:eof


  1. 변수 지정
    • set 변수명=값
  2. 파일 존재 유무
    • if exist 파일포맷 goto 레이블
  3. 특정 디렉토리 내 파일 리스트로 만들기
    • for /f "tokens=1,2 delims=," %%A in ('forfiles /P %target% /M %file_format% /C "cmd /c echo @path,@file"') do call:runSql "%%~A", "%%~B"
  4. 실행 후 에러 여부
    • if errorlevel 1 ~~~
  5. 함수 만들기
    • :printAndLog
      echo %~1
      echo %~1 >> %~2
      goto:eof

댓글

이 블로그의 인기 게시물

Spring Batch - JobParameters Default Value 만들기

Hsqldb Server 재기동 시 오류