我想知道我的场景是否真的可以用 rsync 来处理。 Rsync 在我的本地和远程之间工作正常。
htdocs/
folderswithfilesIneed/
somefilesandfolders.jpg
afolder/
somefiles.png
version/
photofolder/
photowithstupidname.jpg
...
anotherfolderwithstupidname/
photowithstupidname.jpg
...
...
我想同步所有这些文件和文件夹,但排除“photofolder”和“anotherfolderwithstupidname”中的所有文件
有人一次性想到这一点吗?
编辑:更清楚地说,“版本”中有很多文件夹,所以我无法一一排除它们的内容。
答案1
当然,使用排除规则很容易做到这一点。要排除目录及其所有内容,只需排除目录本身,甚至不会遍历它。要包含目录somedir
但不包含其内容(即传输空目录),请排除somedir/*
。当排除子句以 开头时/
,它是从您正在同步的目录的根开始的路径。
rsync -a --exclude='/version/photofolder/*' --exclude='anotherfolderwithstupidname/*' htdocs/ elsewhere/
如果要包含所有子目录…/version
但不包含非目录文件…/version
并且不包含子目录的内容:
rsync -a --include='/version/*/' --exclude='/version/*' htdocs/ elsewhere/
如果您想包含 的所有子目录…/version
及其内容,但不包含以下非目录文件…/version
:
rsync -a --include='/version/*/' --include='/version/*/*' --exclude='/version/*' htdocs/ elsewhere/
答案2
新的命令字符串创建 --included 目录并复制其内容目录和/或文件,但只有 2 个目录深。为什么?
rsync -avid --progress ~/MyDocuments/'Inet Publishing'/ --recursive --include='LandisTwo (2019)' --include='LandisTwo (2020) {backup}' --include='*.*' --exclude='**/' e6420:/home/landis/Media/2TBackup/Backups/MyDocuments/"Inet\ Publishing"/ | tee -a ~/logs/Backup-InetPublishing_2020.txt
- 我发现目录已创建,但没有文件复制到其中(无递归)。父目录中的文件被复制,但不复制子目录 - 对其进行处理。
这对我有用,从工作站到服务器,除了 rysnc'ing 父 ../Inet\ Publishing 时的整个目录和所有站点(-avin 中的“n”)之外,还可以将我的个人站点备份(rysnc)到另一台服务器是“试运行”,请删除。)。
--exclude */ 是“Inet Publishing/”中的所有其他目录,并且似乎必须在 --include per man rsync process order 之后(如果在 --include 之前,则所有内容都是 --excluded 并且不再处理进一步的令牌,至少我是这么读的,并且在实践中是这样想出这个的)。
这实际上是我用 cron 运行的脚本之一中的一行。 *显然,目标主机可以是一个IP,我在/etc/hosts中定义了主机,并且有ssh密钥对,,,所以我使用主机名。