백업용 간단한 쉘스크립트

|
꽤나 오랜만의 포스팅....;;

집에서 개인 데이터 백업용으로 FreeNAS를 구축해서 사용중인데,
예전에 하드 한번 날려먹은 경험으로...
이중 백업을 하고 있다.

원래 레이드로 미러링을 걸려고 했는데,
속도 뭐 별로 중요치 않고, 레이드를 써본적이 없기 때문에
레이드가 깨지면 어떻게 하나... 싶어서 그냥 한군데에 넣고 다른 하드로 복사하는 절차.

cp명령에 변경된 파일만 복사하는 옵션이 있는데
FreeNAS상의 쉘에서는 그 옵션이 안먹더라.

그래서 쉘스크립트로 작성.

원본 디렉토리에 있는 파일을 대상 디렉토리로,
없거나, 날짜가 먼저이면 복사하는 간단한 스크립트....

2011/07/19 수정 : 파일명에 공백이 있을 경우 제대로 처리되지 않던 문제 발견... 및 수정...

[code shell]#!/bin/bash

if [ $# != 2 ]
then
    echo Usage : $0 [SourceDir] [TargetDir]
    exit
fi

if [ -d $1 -a -d $2 ]
then
    echo Source : $1
    echo Target : $2
fi

echo Getting file list......
sourceLen=`echo $1 | wc -c`

find $1 | while read f
do
    relative=${f:$sourceLen}
    sourceFile=$1/$relative
    targetFile=$2/$relative

    if [ -d "$sourceFile" ]
    then
        if [ ! -d "$targetFile" ]
        then
            echo Make Directory : $targetFile
            mkdir "$targetFile" -p
        fi
    elif [ -f "$sourceFile" ]
    then
        if [ "$sourceFile" -nt "$targetFile" ]   #newer then. -ot
        then
            echo Copying : $targetFile
            cp "$sourceFile" "$targetFile"
        else
            echo Passing : $targetFile
        fi
    else
        echo Passing.....? : $targetFile
    fi
done
[/code]
And