gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:37:38 25 4
gpt4 key购买 nike

网上有很多关于 rsync 的 howto,但经过几天的努力,反复阅读手册页并破解了一个排除文件,我需要帮助。

我已经创建了一个自定义的本地初始化脚本,它将根文件系统加载到 ram 中,为了支持这个环境,我构建了一个名为 ramsync 的实用程序,它在/(在 ram 中)和/在“支持”磁盘上执行 rsync。当我只想排除许多路径及其内容时,这一切都进行得很顺利。我已经使用这个系统一段时间了,没有遇到任何问题,但是在阅读了更多关于 rsync 的信息之后,我想扩展该实用程序以拥有一个易于调整的模式 conf 文件,以包含一些动态文件。所以这是我遇到麻烦的例子。

在 ram 上运行时安装软件就像进行正常安装一样简单,然后调用 ramsync 将更改复制到磁盘上。这比直接在磁盘上进行安装的所有解包/摆弄要快一点,因为您只需在所有文件 io 完成后写下最终状态。 (做一个openstack compute node build一个多小时的区别)

我的 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/include 的概念有点误导,因为 --exclude-from 和 --include-from 都可以使用 - 和 + 运算符同时包括 includes 和 excludes,并且 include/如果您不包含运算符,则 exclude 只是隐含默认值。我的阅读和我认为在理解 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/*”除了

/var/log/nova/(目录)

/var/log/vcos_install.log(文件)

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

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

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

我正在阅读手册页,试图正确地形成这个问题,并进行了更多试验,似乎应该这样做,但事实并非如此。 我很困惑(rsync)

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

最佳答案

好吧,在昨晚写这篇文章并做更多实验时,我发现我已经很接近了,非常接近了,而且可能已经破解它太久了。最终的答案是尾部斜杠,并且一个递归路径遍历包括目录,然后在包括所需的子目录和文件之后排除内容。所以我的建议是 - 几乎 - 正确的。

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

关于linux - 我如何格式化 rsync -exclude-from 文件,以便它排除文件/目录但包含同一路径中的其他文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com