rsync 拷貝的理解問題

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




發佈了32 篇原創文章 · 獲贊 6 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章