使用Rsync与Cp命令复制.txt文件至指定目录(仅更新已存在文件)
使用rsync增量同步目录下所有.txt文件到~/alltxt
嘿,我来帮你搞定这个rsync同步的问题!你之前用cp全量复制所有txt文件没问题,但要实现只更新变更文件的增量同步,rsync确实是最适合的工具。先给你直接上能用的正确命令,再帮你排查可能遇到的异常情况:
核心同步命令
rsync -avm --include='*.txt' --exclude='*' /path/to/your/source/directory/ ~/alltxt/
参数解释(为啥这么写)
-a:归档模式,会保留文件的权限、时间戳、所有者等元数据,同时递归遍历子目录,是同步场景的必选参数-v:verbose输出,同步过程会显示详细信息,方便你排查哪里出问题-m:自动排除同步后产生的空目录,毕竟我们只关心txt文件,空目录留着没用--include='*.txt':明确告诉rsync要包含所有.txt后缀的文件--exclude='*':排除所有非txt文件,注意顺序!必须先写include再写exclude,rsync是按规则顺序匹配的,反过来就会把所有文件都排除了
常见异常排查
如果执行命令后出问题,大概率是这几个原因:
- 源目录路径没加末尾的
/:要是你写成/path/to/your/source/directory(没加/),rsync会把整个源目录复制到~/alltxt里,变成~/alltxt/source_directory/xxx.txt,而不是直接把txt文件放到~/alltxt下。赶紧补上末尾的/! - 权限不足无法写入:检查
~/alltxt目录的读写权限,普通用户同步到自己的home目录一般没问题,但如果之前用sudo创建过这个目录,可能需要先改权限:chown -R $USER:$USER ~/alltxt - 符号链接没同步对:如果源目录里有指向txt文件的符号链接,默认
-a会复制链接本身;要是你想同步链接指向的实际文件,加上--copy-links参数 - 想清理目标目录中已不存在的txt文件:如果希望目标目录完全和源目录的txt文件保持一致(删掉源里已没有的txt),可以加上
--delete参数,但这个要谨慎用,避免误删重要文件!
内容的提问来源于stack exchange,提问作者Smith Dwayne




