使用rsync在期待与发现-ctime给我一个错误的脚本? [英] Using rsync in expect script with find -ctime give me an error?

查看:2450
本文介绍了使用rsync在期待与发现-ctime给我一个错误的脚本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些帮助与期望脚本和rsync。
当我运行在这样的命令行rsync的正常工作:

  rsync的-avz root@10.33.122.22:'$(查找/集群/存储/ nobackup / coremw的/ var /日志/ saflog / FaultManagementLog /闹钟/ -ctime -1)' /家庭/ imstest /共享/生成/ ReportingT3的/ tmp /

但是,当我用我的expect脚本,看起来像这样我得到一个错误:

 #!的/ usr / bin中/期望-f
设置host_ip [LINDEX $ ARGV 0]
设置用户[LINDEX $ ARGV 1]
设置密码[LINDEX $ ARGV 2]
设置scp_remote_directory [LINDEX $ ARGV 3]
#SET scp_remote_filename [LINDEX $ ARGV 4]
设置local_directory [LINDEX $ ARGV 4]设置force_conservative 1;#设置为1,以强制保守模式中,即使
                          ;#脚本并不保守最初运行
如果{$ force_conservative} {
        集send_slow {1} .1
        PROC发送{忽略ARG} {
                睡眠.1
                exp_send -s - $ ARG
        }
}设置超时-1
#spawn SCP $用户@ $ host_ip:$ scp_remote_directory / $ scp_remote_filename $ local_directory /
产卵的rsync -azv $用户@ $ host_ip:\\'\\ $($找到-ctime scp_remote_directory -1)\\'$ local_directory /
#spawn SCP $用户@ $ host_ip:$ scp_remote_directory / CscfHealthCheckReport_ $ TagID_ $阶段* $ local_directory /
match_max 100000
预计{
  -exact你确定要继续连接(是/否)?{
    送 - 是\\ r
    exp_continue
  }
  -exact$ {}用户@ $ {} host_ip的密码:{
    送 - $密码\\ r
  }
  -exact密码:{
    送 - $密码\\ r
  }
}
预计EOF

脚本名称是td_general_scp.exp我运行它是这样的:

  ./ td_general_scp.exp 10.33.122.22根rootroot /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log /家/ imstest /共享/生成/ ReportingT3 / tmp目录

但后来我得到这个错误:

 重生的rsync -azv root@10.33.122.22:'$(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /闹钟/ FM *。登录-ctime -1)'/家庭/ imstest /共享/生成/ ReportingT3的/ tmp /
意外本地ARG:/cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log
如果arg是一个冒号(:)远程文件/目录,preFIX它。
rsync的错误:在main.c中的语法和用法错误​​(code 1)(1362)接收机= 3.1.0]
预计:产卵ID exp6打不开
    在执行
预计EOF
    (文件./td_general_scp.exp第36行)

但产卵打印看起来,当我在命令行中运行它完全一样的?
我究竟做错了什么?

感谢您的帮助!

我addded从@Shubhangi帕德什的意见,但现在我得到这个错误:

 重生的rsync -azv root@10.33.122.22:'$(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /闹钟/ FM *。登录-ctime -1)'/家庭/ imstest /共享/生成/ ReportingT3的/ tmp /
密码:
接收增量文件列表
rsync的:change_dir/根// $(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /报警失败:没有这样的文件或目录(2)

脚本看起来像现在这样:

 #!的/ usr / bin中/期望-f
设置host_ip [LINDEX $ ARGV 0]
设置用户[LINDEX $ ARGV 1]
设置密码[LINDEX $ ARGV 2]
设置scp_remote_directory [LINDEX $ ARGV 3]
设置local_directory [LINDEX $ ARGV 4]设置force_conservative 1;#设置为1,以强制保守模式中,即使
                          ;#脚本并不保守最初运行
如果{$ force_conservative} {
        集send_slow {1} .1
        PROC发送{忽略ARG} {
                睡眠.1
                exp_send -s - $ ARG
        }
}设置超时-1
#spawn SCP $用户@ $ host_ip:$ scp_remote_directory / $ scp_remote_filename $ local_directory /
产卵的rsync -azv $用户@ $ host_ip:\\'\\ $(找到\\ $ scp_remote_directory \\ -ctime \\ -1 \\)\\'$ local_directory /
#spawn SCP $用户@ $ host_ip:$ scp_remote_directory / CscfHealthCheckReport_ $ TagID_ $阶段* $ local_directory /
match_max 100000
预计{
  -exact你确定要继续连接(是/否)?{
    送 - 是\\ r
    exp_continue
  }
  -exact$ {}用户@ $ {} host_ip的密码:{
    送 - $密码\\ r
  }
  -exact密码:{
    送 - $密码\\ r
  }
}
预计EOF

下面是我打印到channging @Shubhangi帕德什建议使用后1 exp_internal格特时

 重生的rsync -azv root@10.33.122.22:'$(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /闹钟/ FM *。登录-ctime -1)'/家庭/ imstest /共享/生成/ ReportingT3的/ tmp /
父:等待同步字节
家长:孩子讲继续前进
家长:现在从孩子不同步
产卵:返回{} 115454预计:不(spawn_id在exp6)精确匹配字符串你确定要继续连接(是/否)?没有
root@10.33.122.22's~~V密码?没有
密码:?没有
密码:
预计:没有密码:(spawn_id在exp6)精确匹配字符串你确定要继续连接(是/否)??没有
root@10.33.122.22's~~V密码?没有
密码:?是
预计:设置expect_out(0,字符串)密码:
预计:设置expect_out(spawn_id在)exp6
预计:设置expect_out(缓冲)密码:
发送:发送rootroot \\ r把{} exp6接收增量文件列表
rsync的:change_dir/根// $(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /报警失败:没有这样的文件或目录(2)派出8个字节收到159字节111.33字节/秒
总大小为0加速比为0.00
rsync的错误:有些文件/ ATTRS没有转移(见previous错误)(code 23)在main.c中(1655)接收机= 3.1.0]
rsync的:[接收器]写入错误:断管(32)
预计:读取EOF
预计:设置expect_out(spawn_id在)exp6
预计:设置expect_out(缓冲)\\ r \\ nreceiving增量文件列表\\ r \\ nrsync:change_dir/根// $(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /报警失败:没有这样的文件或目录(2个)\\ r \\ n \\ r \\ nsent 8个字节收到159字节111.33字节/秒\\ r \\ n总大小为0加速比为0.00 \\ r \\ nrsync错误:一些文件/ ATTRS未转移(见previous错误)在main.c中(1655)(code 23)接收机= 3.1.0] \\ r \\ nrsync:[接收器]写入错误:中断的管道(32个)\\ r \\ n
imstest @ TCA-Hubba3:〜/共享/生成/ ReportingT3 /斌$

我错过了昌`的建议,但现在我已经按照建议的确切行:

 重生的rsync -azv $用户@ $ host_ip:\\'\\ $(找到\\ $ scp_remote_directory \\ -ctime \\ -1 \\)\\`$ local_directory /

但现在我得到一个权限被拒绝的输出?我以root身份登录它不可能是一个权限问题。错误输出看起来是这样的。

 重生的rsync -zv root@10.33.122.22:`$(查找/集群/存储/无备份/ coremw的/ var /日志/ saflog / FaultManagementLog /闹钟/ FM *。登录-ctime -1)`/家庭/ imstest /共享/生成/ ReportingT3的/ tmp /
父:等待同步字节
家长:孩子讲继续前进
家长:现在从孩子不同步
产卵:返回{} 118075预计:不(spawn_id在exp6)精确匹配字符串你确定要继续连接(是/否)?没有
root@10.33.122.22's~~V密码?没有
密码:?没有
密码:
预计:没有密码:(spawn_id在exp6)精确匹配字符串你确定要继续连接(是/否)??没有
root@10.33.122.22's~~V密码?没有
密码:?是
预计:设置expect_out(0,字符串)密码:
预计:设置expect_out(spawn_id在)exp6
预计:设置expect_out(缓冲)密码:
发送:发送rootroot \\ r把{} exp6庆典: /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/FmAlarmLog_20160422_152507.log:没有权限派出8个字节收到5个字节8.67字节/秒
总大小为0加速比为0.00
预计:读取EOF
预计:设置expect_out(spawn_id在)exp6
预计:设置expect_out(缓冲)\\ r \\ nba​​sh: /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/FmAlarmLog_20160422_152507.log:权限被拒绝\\ r \\ n \\ r \\ nsent 8个字节收到5个字节8.67字节/秒\\ r \\ n总大小为0加速比为0.00 \\ r \\ n
imstest @ TCA-Hubba3:〜/共享/生成/ ReportingT3 /斌$


解决方案

下面两个变化在的rsync 命令expect脚本会解决问题。


  1. 逃生空间找到命令 - $($找到-ctime scp_remote_directory -1)

  2. 将取代'`

因此​​,在产卵声明expect脚本看起来像

 重生的rsync -azv $用户@ $ host_ip:\\'\\ $(找到\\ $ scp_remote_directory \\ -ctime \\ -1 \\)\\`$ local_directory /

I need some help with an expect script and rsync. When I run rsync in command line like this it works fine:

rsync -avz root@10.33.122.22:'$(find /cluster/storage/nobackup/coremw/var/log/saflog/FaultManagementLog/alarm/ -ctime -1)' /home/imstest/shared/Generate/ReportingT3/tmp/

But when I use my expect script that looks like this I get an error:

#!/usr/bin/expect -f
set host_ip [lindex $argv 0 ]
set user [lindex $argv 1 ]
set password [lindex $argv 2]
set scp_remote_directory [lindex $argv 3 ]
#set scp_remote_filename [lindex $argv 4] 
set local_directory [lindex $argv 4]

set force_conservative 1  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
#spawn scp $user@$host_ip:$scp_remote_directory/$scp_remote_filename $local_directory/
spawn rsync -azv $user@$host_ip:\'\$(find $scp_remote_directory -ctime -1)\' $local_directory/
#spawn scp $user@$host_ip:$scp_remote_directory/CscfHealthCheckReport_$TagID_$phase* $local_directory/
match_max 100000
expect {
  -exact "Are you sure you want to continue connecting (yes/no)? " {
    send -- "yes\r"
    exp_continue
  }
  -exact "${user}@${host_ip}'s password: " {
    send -- "$password\r"
  }
  -exact "Password: " {
    send -- "$password\r"
  }
}
expect eof

The script name is td_general_scp.exp and i run it like this:

./td_general_scp.exp 10.33.122.22 root rootroot /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log /home/imstest/shared/Generate/ReportingT3/tmp

But then i get this error:

spawn rsync -azv root@10.33.122.22:'$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log -ctime -1)' /home/imstest/shared/Generate/ReportingT3/tmp/
Unexpected local arg: /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log
If arg is a remote file/dir, prefix it with a colon (:).
rsync error: syntax or usage error (code 1) at main.c(1362) [Receiver=3.1.0]
expect: spawn id exp6 not open
    while executing
"expect eof"
    (file "./td_general_scp.exp" line 36)

But the spawn printout looks exactly the same as when i run it in command line? What am i doing wrong?

Thanks for the help!

I addded the comments from @Shubhangi Pardeshi but now i get this error:

spawn rsync -azv root@10.33.122.22:'$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log -ctime -1 )' /home/imstest/shared/Generate/ReportingT3/tmp/
Password: 
receiving incremental file list
rsync: change_dir "/root//$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm" failed: No such file or directory (2)

The scripts looks like this now:

#!/usr/bin/expect -f
set host_ip [lindex $argv 0 ]
set user [lindex $argv 1 ]
set password [lindex $argv 2]
set scp_remote_directory [lindex $argv 3 ]
set local_directory [lindex $argv 4]

set force_conservative 1  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
#spawn scp $user@$host_ip:$scp_remote_directory/$scp_remote_filename $local_directory/
spawn rsync -azv $user@$host_ip:\'\$(find\ $scp_remote_directory\ -ctime\ -1\ )\' $local_directory/
#spawn scp $user@$host_ip:$scp_remote_directory/CscfHealthCheckReport_$TagID_$phase* $local_directory/
match_max 100000
expect {
  -exact "Are you sure you want to continue connecting (yes/no)? " {
    send -- "yes\r"
    exp_continue
  }
  -exact "${user}@${host_ip}'s password: " {
    send -- "$password\r"
  }
  -exact "Password: " {
    send -- "$password\r"
  }
}
expect eof

Here is the printout i gert when using exp_internal 1 after channging to @Shubhangi Pardeshi suggestion.

spawn rsync -azv root@10.33.122.22:'$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log -ctime -1 )' /home/imstest/shared/Generate/ReportingT3/tmp/
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {115454}

expect: does "" (spawn_id exp6) match exact string "Are you sure you want to continue connecting (yes/no)? "? no
"root@10.33.122.22's password: "? no
"Password: "? no
Password: 
expect: does "Password: " (spawn_id exp6) match exact string "Are you sure you want to continue connecting (yes/no)? "? no
"root@10.33.122.22's password: "? no
"Password: "? yes
expect: set expect_out(0,string) "Password: "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "Password: "
send: sending "rootroot\r" to { exp6 }

receiving incremental file list
rsync: change_dir "/root//$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm" failed: No such file or directory (2)

sent 8 bytes  received 159 bytes  111.33 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.0]
rsync: [Receiver] write error: Broken pipe (32)
expect: read eof
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "\r\nreceiving incremental file list\r\nrsync: change_dir "/root//$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm" failed: No such file or directory (2)\r\n\r\nsent 8 bytes  received 159 bytes  111.33 bytes/sec\r\ntotal size is 0  speedup is 0.00\r\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.0]\r\nrsync: [Receiver] write error: Broken pipe (32)\r\n"
imstest@TCA-Hubba3:~/shared/Generate/ReportingT3/bin$ 

I missed to chang to ` as the suggestion but now i have the exact row as suggested:

spawn rsync -azv $user@$host_ip:\`\$(find\ $scp_remote_directory\ -ctime\ -1\ )\` $local_directory/

But now I get a permission denied output? I logged in as root it can't be a permission problem. The error output looks like this.

spawn rsync -zv root@10.33.122.22:`$(find /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/Fm*.log -ctime -1 )` /home/imstest/shared/Generate/ReportingT3/tmp/
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {118075}

expect: does "" (spawn_id exp6) match exact string "Are you sure you want to continue connecting (yes/no)? "? no
"root@10.33.122.22's password: "? no
"Password: "? no
Password: 
expect: does "Password: " (spawn_id exp6) match exact string "Are you sure you want to continue connecting (yes/no)? "? no
"root@10.33.122.22's password: "? no
"Password: "? yes
expect: set expect_out(0,string) "Password: "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "Password: "
send: sending "rootroot\r" to { exp6 }

bash: /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/FmAlarmLog_20160422_152507.log: Permission denied

sent 8 bytes  received 5 bytes  8.67 bytes/sec
total size is 0  speedup is 0.00
expect: read eof
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "\r\nbash: /cluster/storage/no-backup/coremw/var/log/saflog/FaultManagementLog/alarm/FmAlarmLog_20160422_152507.log: Permission denied\r\n\r\nsent 8 bytes  received 5 bytes  8.67 bytes/sec\r\ntotal size is 0  speedup is 0.00\r\n"
imstest@TCA-Hubba3:~/shared/Generate/ReportingT3/bin$ 

解决方案

Below two changes in rsync command in expect script will resolve issue

  1. Escape space in find command- $(find $scp_remote_directory -ctime -1)
  2. replace ' by `

Hence, spawn statement in expect script would look like

spawn rsync -azv $user@$host_ip:\`\$(find\ $scp_remote_directory\ -ctime\ -1\ )\` $local_directory/

这篇关于使用rsync在期待与发现-ctime给我一个错误的脚本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆