rsync 拷贝的理解问题

5 篇文章 0 订阅
1 篇文章 0 订阅

rsync  拷贝的理解问题 


问题:这两条命令的区别

rsync -av --delete --exclude-from="logs" /tmp/src_dir/*  /tmp/dest_dir/
rsync -av --delete --exclude-from="logs" /tmp/src_dir/  /tmp/dest_dir/


源目录: src_dir/
包含文件: file_a  file_b file_c
目标目录 dest_dir/
包含文件: file_d


理解:
不带*  说明 你拷贝的源目录是   /tmp/src_dir/
带*     说明  你拷贝的源目录是这个 /tmp/src_dir/  目录  下面的子文件和目录



疑问:
那为啥 加上--delete 以后不带*的  会把 目的目录——中存在的 而源目录——不存在的文件 删除掉  带*的却不删除呢?



解释:
带了 * ,就是目录下所有的可见文件一一进行rsync 拷贝
隐藏文件都不会rsync



/tmp/src_dir/*  包含所有源目录中的可见文件 file_a  file_b file_c ,但是不包含目标文件夹中的 file_d


所以你执行 rsync -av --delete --exclude-from="logs" /tmp/src_dir/  /tmp/dest_dir/ 后,
rsync 工具会理解为  目录  /tmp/dest_dir/  是目录 /tmp/src_dir/  的一个完整镜像,所以他会把  file_a  file_b file_c  拷贝到 /tmp/dest_dir/并删除里面的file_d(因为他认为file_d,是以前存在,但是已经被你删除掉的文件)。


rsync -av --delete --exclude-from="logs" /tmp/src_dir/*  /tmp/dest_dir/

rsync 工具会理解为 目录 /tmp/src_dir/下面的文件 需要备份拷贝到 /tmp/dest_dir/ ,所以他会把  file_a  file_b file_c  拷贝到 /tmp/dest_dir/,并且会保留原来的file_d(因为你只是把文件备份到我这里而已)。



其中
src_dir/*   表示的是      
src_dir/file_src2
src_dir/file_src

就相当于  rsync -av --delete --exclude-from="logs" /tmp/src_dir/file_a  /tmp/src_dir/file_b  /tmp/src_dir/file_c  /tmp/dest_dir/


对比理解:

源目录:src_dir/
包含文件: file_a  file_b file_c
目标目录dest_dir/
包含文件: file_d



rsync 中   过去后/tmp/dest_dir/:

 /tmp/src_dir   表示 把该目录 拷贝过去 src_dir  file_d

/tmp/src_dir/ 表示  把该目录下的所有文件完全镜像  拷贝过去 file_a  file_b file_c

/tmp/src_dir/* 表示  把该目录下的所有文件  拷贝过去 file_a  file_b file_c file_d




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值