在不同節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候,如果數(shù)據(jù)文件大小數(shù)目比較大的話使用scp經(jīng)常會(huì)傳到一半給斷掉。
這里我改成了rsync進(jìn)行斷點(diǎn)續(xù)傳坤候,不過(guò)這種方法也會(huì)有時(shí)候斷掉。所以我這里補(bǔ)充了一個(gè)使用while循環(huán)的操作企蹭,即如果斷掉了白筹,那就接著來(lái),循環(huán)指定次數(shù)谅摄,直到全部跑完徒河。不過(guò)這種方式也有不足之處,有時(shí)候全部傳完了也會(huì)繼續(xù)跑送漠。但是也無(wú)傷大雅顽照,只要全部傳完就可以啦~
直接放腳本scp.sh
,如下:
# 設(shè)置參數(shù)
indir=$1 # 上傳文件夾
num=$2 # 循環(huán)次數(shù)
log_dir=`pwd`
for i in `seq 1 $num`
do
echo $i >> $log_dir/copy.log
expect -c "
set timeout 2000
#spawn scp -r $indir <你的目標(biāo)賬戶名>@<你的目標(biāo)IP>:<你的目標(biāo)目錄>
spawn rsync -arLP $indir <你的目標(biāo)賬戶名>@<你的目標(biāo)IP>:<你的目標(biāo)目錄>
#--- 自動(dòng)填充密碼 ---
expect {
\"password:\" {log_file $log_dir/copy.log;send \"<你的目標(biāo)賬戶名密碼>\r\";}
timeout { puts \" time out\" ;exit 1 }
}
expect eof"
done
運(yùn)行很簡(jiǎn)單闽寡,如下
bash <上傳文件夾> <次數(shù)int>
要注意代兵,上傳文件夾不能有/
在最后面,如果有的話會(huì)直接上傳文件夾里面的內(nèi)容爷狈,而不是整個(gè)文件夾V灿啊!淆院!
最后會(huì)在本地跑的路徑下面生成一個(gè)copy.log的日志文件何乎,記錄了上傳的數(shù)據(jù)日志
如果不想要這個(gè)日志,可以在腳本里面設(shè)置rsync -arP
為rsync -arp
土辩。具體的參數(shù)解釋如下(參考:http://www.ruanyifeng.com/blog/2020/08/rsync.html)
-a支救、--archive參數(shù)表示存檔模式,保存所有的元數(shù)據(jù)拷淘,比如修改時(shí)間(modification time)各墨、權(quán)限、所有者等启涯,并且軟鏈接也會(huì)同步過(guò)去
-r參數(shù)表示遞歸贬堵,即包含子目錄恃轩。
--progress參數(shù)表示顯示進(jìn)展。
--partial參數(shù)允許恢復(fù)中斷的傳輸黎做。不使用該參數(shù)時(shí)叉跛,rsync會(huì)刪除傳輸?shù)揭话氡淮驍嗟奈募皇褂迷搮?shù)后蒸殿,傳輸?shù)揭话氲奈募矔?huì)同步到目標(biāo)目錄筷厘,下次同步時(shí)再恢復(fù)中斷的傳輸。一般需要與--append或--append-verify配合使用宏所。
-P參數(shù)是--progress和--partial這兩個(gè)參數(shù)的結(jié)合酥艳。
-l 保留軟連接
若是拷貝的原目錄里面有一個(gè)軟鏈接文件,那這個(gè)軟鏈接文件指向到了另外一個(gè)目錄下
在加上-l爬骤,它會(huì)把軟鏈接文件本身拷貝到目標(biāo)目錄里面去
-L 加上該選項(xiàng)后充石,同步軟鏈接時(shí)會(huì)把源文件給同步
如果跑完了會(huì)在在文件夾中出現(xiàn)了如下信息:
最后,大功告成霞玄!如果設(shè)置的次數(shù)還沒(méi)有傳完骤铃,則再繼續(xù)提交即可,會(huì)接著上傳溃列。