tar_ssh 配合下载文件(适合于带宽充足传输大量小文件场景)

局域网网速快,但是当要传输大量小文件时倘若仍然使用scp,由于每个文件传输完毕都需要独立进行传输完毕的确认,这样就无法充分利用带宽。一方面等待确认时tcp窗口无法填满,另一方面文件传完之前确认也不会开始读下一个文件。

而ssh tar传输方式则恰对应与该场景,将所有文件变成一条流,连续传输,省掉了linux的传输确认过程。

#不带压缩
ssh ${username}@${ip} '(cd ${src_folder_path}&&tar -cf - ${src_folder_name} | cat)' | tar xfv - -C ${dst_path}
#带压缩
ssh ${username}@${ip} '(cd ${src_folder_path}&&tar -cf - ${src_folder_name} | cat | gzip -1)' | gzip -d | tar xfv - -C ${dst_path}

spawn bash -c "ssh ${username}@${ip} '(cd ${src_folder_path};tar -cf - ${src_folder_name} | cat)' | tar xfv - -C ${dst_path}"
expect {
"(yes/no)?" { send "yes
";exp_continue } 
"*assword:*" { send "${password}
" }
}
原文地址:https://www.cnblogs.com/dongzhiquan/p/linux_transfer_tar_ssh.html