使用shell 脚本编写根据用户输入的文件名(模糊匹配)查找出来并将该文件复制到另一台(自动输入密码)服务器上并改成输入名称
时间: 2024-05-16 18:16:48 浏览: 16
可以使用以下脚本实现:
```shell
#!/bin/bash
read -p "请输入文件名(支持模糊匹配):" filename
read -p "请输入目标服务器IP地址:" ip
read -p "请输入目标服务器用户名:" username
read -s -p "请输入目标服务器密码:" password
echo ""
# 查找文件
file=$(find . -name "*${filename}*")
# 复制文件
if [ -n "$file" ]; then
read -p "请输入新文件名:" newname
scp "$file" "${username}@${ip}:~/newname"
echo "文件已成功复制到目标服务器!"
else
echo "未找到符合条件的文件!"
fi
```
脚本的具体实现过程如下:
1. 提示用户输入文件名,支持模糊匹配。
2. 提示用户输入目标服务器的 IP 地址、用户名和密码。
3. 使用 `find` 命令查找符合条件的文件。
4. 如果找到了文件,则提示用户输入新文件名,并使用 `scp` 命令复制文件到目标服务器上。
5. 如果未找到符合条件的文件,则输出提示信息。
注意,需要将脚本保存为一个可执行文件,并且需要在本地和目标服务器上安装 `ssh` 和 `scp` 命令。另外,为了安全起见,建议将目标服务器的密码保存在一个单独的文件中,并设置只有当前用户能够读取该文件的权限。
相关问题
使用shell 脚本编写根据用户输入的文件名(模糊匹配)查找出来(确认查找到的文件是否正确)并将该文件scp到另一台(自动输入密码)服务器上添加确认查找到的文件是否符合
以下是一个简单的脚本,可以实现根据用户输入的文件名模糊匹配,查找文件并将其scp到另一台服务器上。在脚本中,使用了read命令获取用户输入,使用find命令查找文件,使用sshpass命令自动输入密码进行scp操作。
```bash
#!/bin/bash
# 获取用户输入的文件名
read -p "请输入文件名:" file_name
# 在当前目录及其子目录下查找文件
find . -name "*${file_name}*" > file_list.txt
# 显示查找到的文件列表
echo "查找到的文件列表:"
cat file_list.txt
# 提示用户输入要传输到哪台服务器
read -p "请输入目标服务器IP地址:" server_ip
# 提示用户输入目标服务器用户名
read -p "请输入目标服务器用户名:" server_user
# 提示用户输入目标服务器密码
read -s -p "请输入目标服务器密码:" server_password
# 循环读取文件列表
while read file_path; do
# 确认要传输的文件是否正确
read -p "确认要传输文件 ${file_path} 吗?[Y/N]:" confirm
if [[ ${confirm} == "Y" ]] || [[ ${confirm} == "y" ]]; then
# 使用sshpass命令自动输入密码进行scp操作
sshpass -p "${server_password}" scp ${file_path} ${server_user}@${server_ip}:~/remote_dir/
echo "${file_path} 传输完成!"
fi
done < file_list.txt
# 删除临时文件
rm -f file_list.txt
```
需要注意的是,使用sshpass命令自动输入密码进行scp操作存在安全风险,建议使用SSH公钥认证方式进行登录。
编写一个shell脚本使用sftp服务定期将本机服务器的文件同步到另一台机器,用到expect
好的,以下是一个使用sftp服务定期同步文件到另一台机器的shell脚本,其中使用了expect实现自动化交互:
```bash
#!/bin/bash
# 定义变量
local_dir="/path/to/local/dir" # 本地目录
remote_dir="/path/to/remote/dir" # 远程目录
remote_host="remote_host" # 远程主机地址
remote_user="remote_user" # 远程主机用户名
remote_pass="remote_password" # 远程主机密码
expect_script=$(mktemp) # 生成临时expect脚本文件
# 生成expect脚本
cat > $expect_script << EOF
spawn sftp $remote_user@$remote_host
expect "password:"
send "$remote_pass\r"
expect "sftp>"
send "cd $remote_dir\r"
expect "sftp>"
send "lcd $local_dir\r"
expect "sftp>"
send "put *\r"
expect "sftp>"
send "bye\r"
expect eof
EOF
# 执行expect脚本
expect $expect_script
# 删除临时expect脚本文件
rm -f $expect_script
```
使用方法:
1. 将上述代码保存为脚本文件(例如sync.sh)。
2. 修改脚本文件中的变量为实际值,包括本地目录、远程目录、远程主机地址、远程主机用户名、远程主机密码。
3. 使用crontab命令设置定期执行脚本的时间间隔,例如:
```
# 每天凌晨1点执行一次
0 1 * * * /bin/bash /path/to/sync.sh
```
以上命令表示在每天的0点0分执行一次脚本文件/path/to/sync.sh。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)