每天早上醒来,看见你和阳光都在,这便是我要的未来。

从window系统复制文件到linux下

上一篇 / 下一篇  2017-08-10 14:04:18 / 个人分类:linux


以下是参考文章:http://www.cnblogs.com/kevingrace/p/5900303.html
第一:先按照文章中的步骤在linux系统中安装tcl和expect
第二:编写脚本来复制文件
使用scp的命令进行复制,会提示需要输入密码
expect捕获到控制台需要密码的提示,自动发送密码登录,
然后就开始复制windows中的文件到linux的目录下。

如下将scp复制功能包装成小工具,在shell脚本中调用传参即可:
scp.exp --这是expect脚本文件
#!/usr/local/bin/expect   -----指定了expect的路径,与shell脚本相同,这一句指定了程序在执行时到哪里去寻找相应的启动程序
set timeout 10        
set host "Administrator@xx.xxx.xx.xxx" 
set passwd "aaaaaa"
set remote_path [lindex $argv 1]  -----设置的2个参数,执行脚本时获取脚本名称后面第2个参数
set local_file [lindex $argv 0]  -----设置的2个参数,执行脚本时获取脚本名称后面第1个参数
  
spawn scp -r $host:$remote_path $local_file   ----获取参数执行scp命令,-r复制文件夹下的所有文件
expect "*assword:*"    ----当捕获到终端输出password字样
send "$passwd\r"      ----自动发送密码
expect "1000%"
expect eof


auto.sh  ---shell脚本调用scp.exp
#!/bin/sh
#从windows下复制工程文件,复制多个文件夹到linux下
#调用scp.exp脚本,传参
./scp.exp  /root/src_file   /path/directory/\{foo.txt,bar.txt,aa.txt,bb.txt\}    
 

#我这里实际是为了打包做的转移文件,将编译好的工程包转移到linux服务器, 有很多并行的工程包,复制的话我用了个循环  。
#这样就能一次复制多个文件夹,然后根据list循环复制所有的文件夹到不同的目录,如下:
#!/bin/sh
#需要复制的工程
list="erp stm"
#windows端需要复制的文件地址前缀
prefix="d:/ant/"
#windows端需要复制的文件地址后缀
erpfile="lingdang-erp-api,lingdang-flow-api,lingdang-erp-pc"
stmfile="lingdang-stm-api,lingdang-im-api,lingdang-login,lingdang-stm-pc"
for i in $list;  
do 
#根据list中的值拼接出例如erpfile、stmfile
src=$i""file
echo "remote list  "${!src}
#第四步:从windows下复制工程文件
#拼接出windows端的文件地址 $prefix\{${!src}\}
./scp.exp /opt/www/$i.lingdang.com/webapps   $prefix\{${!src}\}
echo "  copy about "$i" project......."  
done
 8.11补充:发现批量传文件时总会丢文件,修改了超时时间:
set timeout -1
设置无穷大,没有发现丢文件的情况


TAG:

 

评分:0

我来说两句

Open Toolbar