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