前情提要(两台Linux服务器之间传输批量文件夹):
两台都是外网服务器,都是Linux系统(CentOS),都安装了宝塔,用于搭建巨量的静态网站,由于A服务器准备不要了,所以要在A服务器转移几百个静态网站到B服务器。
Linux下scp单命令传输文件夹测试:
准备工作,先测试转移一个文件夹看看,传输文件正常就首选自带的scp程序了,老牌、安全、稳定。命令如下(A服务器下运行):
scp -CrpP 12345 -i id_rsa /www/wwwroot/www.xxx.com/* root@123.123.1.1:/www/wwwroot/www.xxx.com
解析:
C 是压缩传输
r 是递归子文件夹
p 是连权限等文件属性一起传输
P 大写P后面跟着空格加目标服务器SSH端口号,如果ssh是默认的22端口,可以省略
i 则是指定免密链接的私钥文件,文章后面再顺便讲解怎么生成这免密链接的私钥文件
加v可以看到传输的具体过程,但我实际实践发现,这所谓的具体过程是很细碎的通讯过程,没必要也晦涩难懂,不加v就有详细的文件传输列表,够了~
注意:第一次链接需要保存访问指纹fingerprint,如下图,输入yes即可。
用Shell脚本批量传输文件夹到另一个Linux服务器:
好了,单个文件夹的传输测试成功了。接下来就是批量传输了,由于域名没有规律,那么就只好通过域名清单的文本文件来提供给脚本运行,替代Shell命令的参数了。
文件名weblist.txt
格式:
abc100.com
abc101.com
abc102.com
Shell文件copy2_new.sh内容如下:
1,宝塔系统里网站的保存位置都是/www/wwwroot/下,都是www.开头的文件夹
2,scp命令前加time是计算每个域名复制的合计时间,但缺点就是没有滚动的文件名清单了
3,time命令后面我试了重定向输出>>/root/webtrans.log 没成功,不知道为啥,后面有兴趣再研究。有懂的可以留言告知,万分感谢~
#!/bin/bash
while read rows