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