linux服务器间文件夹拷贝
要求,在A机器执行脚本,把A机器的某个目录文件拷贝到B机器。
第一版ftp实现:
1、A 机器先安装 ftp 客户端
$ sudo yum install ftp
2、B机器安装ftp服务端
$ sudo yum -y install vsftpd
2.1、查询B机器是否安装完成,执行后有下面的输出,就是ok的。
$ netstat -an | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
2.2、ftp 的重启命令
$ sudo service vsftpd restart
3、在A机器中编写一个执行脚本
vi upload.sh
#!/bin/bash #upload dir to remote ftp server
read -p "Input local dir: " updir #local dir
read -p "Input remote dir: " todir #remote dir
read -p "Input remote IP: " ip #remote IP
read -p "Input ftp username: " user #ftp username
read -p "Input password: " password #password sss=`find $updir -type d -printf $todir/'%P\n'| awk '{if ($0 == "")next;print "mkdir " $0}'`
aaa=`find $updir -type f -printf 'put %p %P \n'`
ftp -nv $ip <<EOF
user $user $password
type binary
prompt
$sss
cd $todir
$aaa
quit
EOF
4、再给这个 .sh 文件赋予执行权限
chmod +x upload.sh
5、执行sh
$ ./upload.sh
输入五个参数
/home/admin/testA
aa
1xx.xx.xxx.xx
admin
xxx
完成。
注意:
都是在 admin 账户下操作,所以用了 sudo 借用 root 权限, roo t账户可以省去。
目标服务器只能写一层目录 aa,不能写多层 aa/bb/cc
改善版scp实现:
1、实现过程需要使用到 expect 处理交互,先安装 expect
sudo yum -y install expect
2、在A机器上编写执行脚本
#!/bin/bash #upload dir to remote scp server
read -p "Input local dir: " updir #localdir
read -p "Input remote dir: " todir #remote dir
read -p "Input remote IP: " ip #remote IP
read -p "Input ftp username: " user #scp username
read -p "Input password: " password #password /usr/bin/expect <<EOF
set timeout -1 ;
spawn ssh ${user}@${ip} ;
expect *password* { send "${password}\r" } ;
expect ${user}@* { send "stat ${todir}\r" } ;
expect {
*File:* {
send "rm -rf ${todir}\r"
expect ${user}@* { send "mkdir -p ${todir}\r" }
}
*stat:* { send "mkdir -p ${todir}\r" }
} ;
send "exit\r" ;
expect eof ;
EOF /usr/bin/expect <<EOF
set timeout -1 ;
spawn scp -r ${updir} ${user}@${ip}:${todir} ;
expect *password* { send "${password}\r" } ;
expect eof ;
EOF
脚本中几个实现逻辑:
1、ssh、scp 连接时,不能直接输入 password,所以要用 expect 处理交互命令。
2、expect处理交互命令时可以写expect执行文件,也可以省事,直接写在bash脚本文件中。写入bash脚本中也有两种方式:
- 一种是上面脚本中采用的输入重定向的方式。
- 一种是以可执行命令前置符 expect -c 的方式,把expect 执行命令写到bash脚本中。
#!/bin/bash #upload dir to remote scp server
read -p "Input local dir: " updir #localdir
read -p "Input remote dir: " todir #remote dir
read -p "Input remote IP: " ip #remote IP
read -p "Input ftp username: " user #scp username
read -p "Input password: " password #password expect -c "
set timeout -1 ;
spawn scp -r ${updir} ${user}@${ip}:${todir} ;
expect *password* { send \"${password}\r\" } ;
expect eof ;
"
expect [-c cmds]
3、在判断文件目录是否存在时,正常在本机执行的 shell 中一般用 test -d 命令判断,但是在 expect 交互时,不便使用 shell 命令,改成使用 linux 命令 stat 。根据目录存在与否的不同输出,作为判断条件,选择执行后续代码。
改善版比第一版好在:改善版能指定B机器的任意目录作为接受路径,并对路径判断,存在-->先删再建,不存在直接建。支持多级目录。
注意:
shell中插入expect脚本的执行,注意第二个EOF所在行前面不能留空格
du命令用来查看目录或文件所占用磁盘空间的大小。常用选项组合为:du -sh
linux服务器间文件夹拷贝的更多相关文章
- 从Linux服务器下载文件夹到本地
从Linux服务器下载文件夹到本地 1.使用scp命令 scp /home/work/source.txt work@192.168.0.10:/home/work/ #把本地的source.txt文 ...
- 使用pscp实现Windows 和 Linux 服务器间的远程拷贝文件
在工作中,每次部署应用时都需要从本机Windows 服务器拷贝文件到Linux 上,有时还将Linux 上的文件拷到本机,这些操作都是可以使用pscp实现的.下文将详细描述如何使用: PSCP (Pu ...
- Linux服务器间文件实时同步的实现
使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...
- SCP:从Linux服务器下载文件夹到本地
原文链接:https://blog.csdn.net/netlai/article/details/79756279 scp /home/work/source.txt work@192.168.0. ...
- Linux服务器间文件传输
利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...
- 从Linux服务器下载文件到本地命令
从Linux服务器下载文件夹到本地1.使用scp命令 scp /home/work/source.txt work@192.168.0.10:/home/work/ #把本地的source.txt文件 ...
- scp实现mac与linux服务器之间文件传输
1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.ma ...
- rsync+sersync+inotify实现服务器间文件同步之一
rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置 2013年12月14日 ⁄ Linux管理, 服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync ...
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)
本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...
随机推荐
- C#从SqlServer数据库读写文件源码
如下的资料是关于C#从SqlServer数据库读写文件的内容,希望能对码农们有一些用. <%@ Page Language="C#" %> <script run ...
- windows/Linux下的程序员文档浏览工具
Dash + Alfred https://www.jianshu.com/p/77d2bf8df81f 对于程序员来说,查看api文档是非常频繁,经常窗口之间切换非常麻烦,mac下就有一个查文档的神 ...
- Linux(DeepInOS) 下 mysql 的安装与基本配置
索引: 目录索引 参看代码 GitHub: DeepIn(GNU/Linux) MySQL 一.安装 sudo apt-get install mysql-server 期间需要输入两次密码,root ...
- MySQL下perror工具查看System Error Code信息
在MySQL数据库的维护过程中,我们有时候会在MySQL的错误日志文件中看到一些关于Operating system error的错误信息,例如在MySQL的错误日志里面,有时候会看到关于 Inn ...
- mssql sqlserver text数据类型专题说明
摘要: 下文分享text数据类型的简介及处理text数据类型所涉及的函数,如下所示: text 数据类型简介: mssql sqlserver 常用数据类型简介 mssql sqlserver tex ...
- Linux/Unix环境下的make命令详解
https://blog.csdn.net/wxqian25/article/details/21226711
- tomcat报异常Invalid character found in method name. HTTP method names must be tokens
最近监控了一下测试环境的日志,突然出现如下一个异常 由Error parsing HTTP request header可以看出是由于解析请求头出错导致的,但是它属于DEBUG级别的异常,虽然不影响系 ...
- RESTful API规范
1. 域名 应该尽量将API部署在专用的域名下. https://api.example.com 如果确定API简单,不会有进一步的括在,可以考虑放在主域名之下. https://example.or ...
- Windows Service 学习系列(一):建立简单的Windows service
参考:https://www.cnblogs.com/cncc/p/7170951.html 一.开发环境 操作系统:Windows 7 X64 开发环境:VS2017 编程语言:C# .NET版本: ...
- window.loaction.href 不自动跳转的问题
window.location.href无效/不跳转的原因分析 1.源代码: <a href="javascript:void(0);" onclick="mo ...