Linux 如何在子文件夹中重新同步文件模式

Linux 如何在子文件夹中重新同步文件模式,linux,bash,rsync,Linux,Bash,Rsync,我有以下远程文件夹/文件结构: /home/user/backup/siteA/regionA/data.sql /home/user/backup/siteA/regionA/data.clean.sql /home/user/backup/siteA/regionA/data.lite.sql /home/user/backup/siteA/regionA/files/ /home/user/backup/siteA/regionB/data.sql /home/user/backup/si

我有以下远程文件夹/文件结构:

/home/user/backup/siteA/regionA/data.sql
/home/user/backup/siteA/regionA/data.clean.sql
/home/user/backup/siteA/regionA/data.lite.sql
/home/user/backup/siteA/regionA/files/
/home/user/backup/siteA/regionB/data.sql
/home/user/backup/siteA/regionB/data.clean.sql
/home/user/backup/siteA/regionB/data.lite.sql
/home/user/backup/siteA/regionB/files/
/home/user/backup/siteA/regionC/data.sql
/home/user/backup/siteA/regionC/data.clean.sql
/home/user/backup/siteA/regionC/data.lite.sql
/home/user/backup/siteA/regionC/files/
/home/user/backup/siteA/regionD/data.sql
/home/user/backup/siteA/regionD/data.clean.sql
/home/user/backup/siteA/regionD/data.lite.sql
/home/user/backup/siteA/regionD/files/
/home/user/backup/siteB/regionA/data.sql
/home/user/backup/siteB/regionA/data.clean.sql
/home/user/backup/siteB/regionA/data.lite.sql
/home/user/backup/siteB/regionA/files/
/home/user/backup/siteB/regionB/data.sql
/home/user/backup/siteB/regionB/data.clean.sql
/home/user/backup/siteB/regionB/data.lite.sql
/home/user/backup/siteB/regionB/files/
/home/user/backup/a-script.sh
/home/user/backup/backup.log
/home/user/backup/siteC
...
...
我需要将*.clean.sql和*.lite.sql从siteA同步到本地的类似结构,例如:

/var/data/dbs/siteA/regionA/data.clean.sql
/var/data/dbs/siteA/regionA/data.lite.sql
我似乎无法让rsync包含/排除正确的内容。我正在努力:

/usr/bin/rsync --archive --del --verbose --verbose --compress --progress --exclude-from=excludes.txt --rsh='ssh -q' --dry-run user@remote:/home/user/backup/siteA /var/data/dbs/siteA
而my excludes.txt包含:

+ *.clean.sql
+ *.lite.sql
- *
然而,我刚刚得到:

receiving incremental file list
[sender] hiding directory siteA because of pattern *
我有一个脚本,它可以在每个站点区域的基础上执行此操作,但不能作为一个整体。我尝试过在排除列表中添加星号和斜线,但似乎找不到正确的组合。有什么建议吗

使现代化 我在这方面取得了更好的成绩

/usr/bin/rsync --archive --del --compress --progress --exclude-from=excludes.txt --rsh='ssh -q' user@remote:/home/user/backup/siteA /var/data/dbs/siteA
使用excludes.txt

+ */
+ *.clean.sql
+ *.lite.sql
- *
但是,这也会解析所有文件文件夹的内容,尽管会跳过/排除它们,这会大大降低速度,并且会用一个巨大的目录列表污染rsync输出

有maxdepth参数吗

那么:

cd /home/user/backup
find site* -name data.clean.sql -o -name data.lite.sql > filestobackup
rsync --archive --verbose --del --compress --progress \
--files-from=filestobackup -d \
--rsh='ssh -q' \
user@remote:/home/user/backup/ /var/data/dbs/

这行不通-这将rsync除了我想要的文件之外的所有内容:我只想rsync*.clean | lite.sql,忽略其余内容,保持文件夹结构。谢谢Stephane,不过你的建议基本上是使用find生成要同步的文件列表,然后设置rsync来完成该列表。虽然这会起作用,但它使这一过程分为两步。。。感觉不干净。但是,我可以看到,使用filesfrom参数将产生快速的rsync时间,因为rsync不需要扫描系统。