如何格式化rsync -exclude-from文件,使其排除文件/目录,但包含在同一路径中的其他文件/目录

时间:2014-05-14 23:14:15

标签: linux bash rsync

有许多关于rsync的在线howto,但经过几天的挣扎,反复阅读手册页并在一个排除文件中进行攻击,我需要一只手。

我创建了一个自定义本地init脚本,它将根文件系统加载到ram中,为了支持这个环境,我构建了一个名为ramsync的实用程序,它在/(在ram中)和/在“后备”磁盘上执行rsync。当我只想排除许多路径及其内容时,这一切都在游动。我一直在使用这个系统已经有一段时间了,但是在阅读了更多关于rsync之后,我想扩展该实用程序,以便轻松调整模式的conf文件,包含一些文件,即时。所以这是我遇到麻烦的例子。

在ram上运行时安装软件就像执行正常安装一样简单,然后调用ramsync来复制磁盘上的更改。这比安装在磁盘上的所有解包/整理都要快得多,因为你只需在所有文件io完成后写下最终状态。 (执行openstack计算节点构建的差异超过一小时)

我的ramsync的默认排除类似于:

cat > /tmp/excludes << EOF
/boot/
/boot/*
/dev/*
/dev/pts
/dev/
/media/*
/mnt/
/mnt/*
/proc/*
/proc/
/sys/*
/sys/
/tmp/*
/tmp/
/run/*
/run/
/var/cache/
/var/cache/*
/var/log/
/var/log/*
/var/run/
/var/run/*
/var/lock/
/var/lock/*
/var/tmp/*
/lib/modules/*/volatile/.mounted
/etc/apparmor.d/cache/*
/ramsync/*
/etc/mtab
EOF

(/ ramsync是ram中磁盘的挂载点)

我通过rsync的“--exclude-from'/ tmp / excludes'”使用了这个列表。进一步阅读rsync的手册页让我相信,排除/包含的概念有点误导,因为--exclude-from和--include-from两者都可以包括包含和排除使用 - 和+运算符,并包含/如果您不包含运算符,则排除仅隐含默认值。我的阅读和我认为在理解rsync过滤器模式和解析方面的进展使我将这个模式文件重制为:

cat > /tmp/excludes << EOF
- /lib/modules/*/volatile/.mounted
- /etc/apparmor.d/cache/***
- /etc/mtab
- /var/cache/***
- /var/lock/***
- /var/log/***
- /var/run/***
- /var/tmp/***
- /boot/***
- /dev/***
- /media/***
- /mnt/***
- /proc/***
- /sys/***
- /tmp/***
- /ramsync/***
- /run/***
EOF

然后我尝试将一些包含应用到这个来获取/ var / log /中的一些文件和目录,但只是我指定的那些文件和目录。

提出问题的所有序言:

我怎样才能排除几乎所有的“/ var / log / *”EXCEPT for

/ var / log / nova /(目录)

/var/log/vcos_install.log(file)

我需要保存此文件和目录。我确切地知道我想要复制哪些目录和文件以及我想要排除哪些目录和文件,但我无法弄清楚哪种语法有意义。我已经尝试了各种包含/排除模式的组合,我似乎无法弄清楚rsync想要代表我想要的行为的调用。

我尝试将以下内容添加到/ tmp / excludes的顶部,但没有骰子。

+ /var/log/vcos_install.log
+ /var/log/nova/***

我正在阅读试图正确形成这个问题的手册页,并且尝试更多,似乎应该这样做,但事实并非如此。 Im_confused(rsync)

+ /var
+ /var/log
+ /var/log/vcos_install.log
+ /var/log/nova/

1 个答案:

答案 0 :(得分:5)

好吧,在写这篇文章并在昨晚进行了更多实验之后,我发现我很近,非常接近,可能已经被黑客攻击太久了。最后的答案是尾随斜杠,并且正在识别的递归路径遍历包括dir,然后在包含所需的子目录和文件之后排除内容。所以我建议的是 - 几乎是对的。

+ /var/
+ /var/log/
+ /var/log/vcos_install.log
+ /var/log/nova/
- /var/log/***
运行cmd时的

结果: rsync -ahhsx --progress --delete --exclude-from'/ tmp / filters'/ / ramsync

sending incremental file list
./
root/.bash_history
          1.77K 100%    0.00kB/s    0:00:00 (xfr#1, ir-chk=1456/8825)
var/log/
var/log/vcos_install.log
             82 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=7/68722)
var/log/nova/

源上有许多其他文件与目标不同,但只复制了明确包含的目录(/ var / log / nova)和我的安装程序日志。这是我正在寻找的混合排除/包含结果。有时以连贯的格式将问题放在一起有助于解决问题。