2

findのファイルリストを作成するために、パスのリストを含む外部ファイルをループするスクリプトがありますrsync。これらのパスには、さまざまな量のパス除外があります(まったく除外しないことを含む)。findこれに基づいて除外を構築する変数を拡張しようとしています。私はたくさんの研究をして困惑しています。言う:

cat backuplist.conf

/mnt/some/dir1 /mnt/some/dir1/exclude/dirA /mnt/some/dir1/exclude/dirB
/mnt/some/dir2 

メインのバックアップスクリプトの関連部分は次のとおりです。

cat backupscript.sh

while read backuppath excludedir1 excludedir2 excludedir3; do
    exclude=("${excludedir1}" "${excludedir2}" "${excludedir3}")  
    find ${backuppath} -not \( -path "*${exclude[0]}" "${exclude[@]:1}") -mtime -10 > file.list
    rsync -vPaz --files-from=file.list --otheroptions
  done < backuplist.conf 

私はその配列の例が(とりわけ)すべて間違っていることを知っていますが、除外がいくつあるかわからないので、配列を構築することが正しい解決策であるかどうかさえわかりません。誰かが私を正しい方向に向けることができますか?Bash / CentOS 6

4

1 に答える 1

0

除外されたディレクトリを配列に保存printfし、コマンドでそれらを出力するために使用しますfind

while read backuppath excludeDirs; do
    excludeArr=( $excludeDirs )
    if [[ ${#excludeArr[@]} == 0 ]]
    then
        find "${backuppath}" -mtime -10 > file.list
    elif [[ ${#excludeArr[@]} == 1 ]]
    then
        find "${backuppath}" -mtime -10 -not -path "${excludeArr[0]}"  > file.list
    else
        find "${backuppath}" -mtime -10  -not \( -path "${excludeArr[0]}" $(printf -- '-o -path "%s" ' "${excludeArr[@]:1}") \) > file.list
    fi
    rsync -vPaz --files-from=file.list --otheroptions
done < backuplist.conf
于 2013-03-05T12:19:10.603 に答える