首页 文章

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

提问于
浏览
2

有很多关于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(文件)

我需要保存这个文件和目录 . 我确切地知道我想要复制哪些目录和文件以及我想要排除哪些目录和文件,但我无法弄清楚哪种语法有意义 . 我已经尝试了各种包含/排除模式的组合,我似乎无法弄清楚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 回答

  • 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)和我的安装程序日志 . 这是我正在寻找的混合排除/包含结果 . 有时以连贯的格式将问题放在一起有助于解决问题 .

相关问题