rsync 匹配通配符 * 失败 link_stat failed: No such file or directory

本文介绍了一个在使用expect脚本进行rsync文件同步时遇到的问题,即expect无法正确处理通配符(*)的情况。文章详细解释了解决方案,通过在expect的spawn命令中加入bash -c command的形式来确保通配符被正确解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rsync -avP /home/map/mongodb2.4.6/data/road140403* map@hz12:/home/map/users/wangxin/script/tmp

上面的命令执行的时候不会报任何错误,并正常的同步数据,此时会弹出交互界面,并提示要输入

hz12服务器的密码,但如果这种操作放在脚本里就要expect来支持,如果放在expect里面的话会报

如下错误:

rsync: link_stat "/home/map/mongodb/data/road140403*" failed: No such file or directory (2)

具体情况如下:


刚开始的时候我以为是rsync无法匹配通配符*才导致的。

后来发现不是该问题,是由于expect里面无法匹配 * 才导致的。

解决办法:

在spawn 后面加上 bash -c "command"

这样expect就认出了通配符*。

脚本如下:

#!/bin/bash
function func_expect {
ExpEnv=`which expect`
$ExpEnv -c "
set timeout -1;
spawn bash -c \"$1\";
expect {
\"(yes/no)?\" {send \"yes\n\";expect \"assword:\";send \"$2\n\"}
\"assword:\" {send \"$2\n\"}
eof {exit 0;}
}
expect eof"
}
{
/home/map/mongodb2.4.6/bin/mongod --shutdown --dbpath=/home/map/mongodb2.4.6/data
pwd="******"
cmd1="rsync -avP /home/map/mongodb2.4.6/data/road140403* map@hz12:/home/map/users/wangxin/script/tmp"
func_expect "$cmd1" "$pwd"

PS:为什么在spawn处用\" $1\" 而不是"$1" ?

      因为在上面已经有"了,此处用  \  转义。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值