循环遍历目录和rsync内容

时间:2012-09-26 10:58:12

标签: linux bash backup rsync

我希望只将特定文件和目录从cpanel备份rsync到远程服务器。

基本结构是:

/backup/cpbackup/daily/USERNAME

从USERNAME目录中我要备份

../USERNAME/mysql/USERNAME.sql

还有一个文件夹(包含文件和子文件夹)

../USERNAME/homedir/siteassets

所以我最终在我的远程服务器上用:

/USERNAME/mysql/USERNAME.sql
/USERNAME/homedir/siteassets

我可以使用通配符

rsync /backup/cpbackup/daily/*/mysql/*.sql  user@remote.ip.address:servername/

但这不会远程向我提供USERNAME文件夹,并且意味着所有文件最终都会合并。我认为通过使用bash或类似的东西迭代文件夹是可能的,但这不是我的强点

2 个答案:

答案 0 :(得分:0)

自己回答:

#!/bin/bash

src="/backup/cpbackup/daily"

for dir in `ls "$src/"`
do
  if [ -d "$src/$dir" ]; then

        # look for mysql directory      
        mypath="$src/$dir/mysql"
        if [ -d $mypath ]; then
                mysqlfile=$mypath/$dir".sql"
                rsync -vau --progress --stats --rsh=ssh $mysqlfile user@remote.ip.address.net:servername/$dir
        fi

        # look for images directory      
        impath="$src/$dir/homedir/siteassets"
        if [ -d $impath ]; then
                rsync -vau --progress --stats --rsh=ssh $impath user@remote.ip.address.net:servername/$dir
        fi

  fi
done

答案 1 :(得分:0)

rsync具有'--include-from'和'--exclude-from'参数。这使您可以在单独的文件中定义白名单和黑名单。也许这可以使解决方案更简单。