在 Bash 下使用 执行备份时rsync
,我尝试排除顶级目录中的所有点文件和隐藏目录,但是不是位于其他目标目录中的目录。例如:
/copyme.c
/.dontcopythisfile
/.dontcopythisdirectory/or_its_contents
/directory/.butcopymetoo
rsync -a --include=".includeme" --exclude=".*" . DEST
无法复制子目录中所需的点文件,但诸如此类的变体--exclude="./.*"
也会失败。
有什么建议吗?这是否需要过滤规则,而不是更简单的规则--exclude
?
答案1
您应该使用锚点,在 rsync 中锚点字符是“/”。
因此您的字符串应该是:
rsync -a --include="/.includeme" --exclude="/.*" ./ DEST
答案2
我通常更喜欢创建包含以下模式的 .rsync-filter 文件:
- /.*
那样,
rsync -hxDPavilyzHFF --stats --delete ./ remote:/backup/
是理想的备份命令。过滤由 -FF 标志完成。
请注意,使用此方法,您可以在各个子目录中拥有各种 .rsync-filter 文件,并应用于其各自的子树。您也可以使用此方法覆盖子目录中的排除项。
答案3
rsync -a --include="/*/.*" --exclude="/.*" --exclude="node_modules" ./ ../out
这对我有用,只需确保输入目录是当前工作的目录即可。