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语言实现WordCount Web化
结对编程项目 代码地址 201631062219,201631011410 gitee项目地址:https://gitee.com/xxlznb/pair_programming 作业地址:https ...
- MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理
1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...
- Docker的使用初探(一):常用指令说明
目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录 ...
- Redis学习笔记(3)——Redis的命令大全
Redis是一种nosql数据库,常被称作数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted se ...
- SQL解析在美团的应用
https://tech.meituan.com/SQL_parser_used_in_mtdp.html 数据库作为核心的基础组件,是需要重点保护的对象.任何一个线上的不慎操作,都有可能给数据库带来 ...
- MySQL之库相关操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...
- ubuntu18.04搭建hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...
- 基于element ui的级联选择器组件实现的分类后台接口
今天在做资产管理系统的时候遇到一个分类的级联选择器,前端是用的element的组件,需要后台提供接口支持. 这个组件需要传入的数据结构大概是这样的,详细的可参考官方案例: [{ value: ...
- 哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法
去年我写了一篇哈希长度扩展攻击的简介以及HashPump安装使用方法,本来已经足够了,但HashPump还不是很完善的哈希长度扩展攻击,HashPump在使用的时候必须提供original_data, ...
- React-propsType和defaultProps
TodoItem.propTypes={ content:PropTypes.string, text:PropTypes.string.isRequired, handleDeleteItem:Pr ...