我写了一个小程序,在第一种情况下,切片文件和目录名列表,这样我就得到了一个文件列表和一个目录列表。
#!/usr/bin/expect -f
set mdproot "****"
set mySource "****"
set myDest "****"
set myDirs {}
set myFiles {}
set i 1
set y 0
lappend myDirs [lindex $argv 0]
foreach variable $argv {
lappend myDirs [lindex $argv $i+1]
lappend myFiles [lindex $argv $y+1]
incr y
incr y
incr i
incr i
}
set DIRECTORIES [lsearch -all -inline -not -exact $myDirs {}]
set FILES [lsearch -all -inline -not -exact $myFiles {}]
#puts " "
#puts $DIRECTORIES
#puts " "
#puts $FILES
foreach file $FILES dir $DIRECTORIES {
puts " Fichier : $file et repertoire : $dir"
spawn scp -p "$mySource/$file" "$myDest/$dir"
expect -re "(.*)assword: " {sleep 1; send -- "$mdproot\r" }
expect eof { return}
}
有我的清单:
$argv
:
2017-11-30
2017-11-30_15-10-44_P_8294418.33_Q1
2017-11-30
2017-11-30_15-10-44_R_8294418.33_Q1
2018-03-07
2018-03-07_09-30-57_R_HOURS_Q1
2018-04-13
2018-04-13_13-23-25_R_HOURS_Q1
2018-05-02
2018-05-02_11-19-37_R_HOURS_Q1
2018-03-07
2018-3-7_9-30-57_P_HOURS_Q1
2018-04-13
2018-4-13_13-23-25_P_HOURS_Q1
2018-05-02
2018-5-2_11-19-37_P_HOURS_Q1
$DIRECTORIES
:
2017-11-30
2017-11-30
2018-03-07
2018-04-13
2018-05-02
2018-03-07
2018-04-13
2018-05-02
$FILES
:
2017-11-30_15-10-44_P_8294418.33_Q1
2017-11-30_15-10-44_R_8294418.33_Q1
2018-03-07_09-30-57_R_HOURS_Q1
2018-04-13_13-23-25_R_HOURS_Q1
2018-05-02_11-19-37_R_HOURS_Q1
2018-3-7_9-30-57_P_HOURS_Q1
2018-4-13_13-23-25_P_HOURS_Q1
2018-5-2_11-19-37_P_HOURS_Q1
实际上我遇到了2个问题(如果我们计算这段代码是多么糟糕的话,就会有3个问题)。
首先,当我运行我的程序时,我为我正在复制的每个文件都有我的%指示符,除了最后一个,它们都会在它们达到100%之前停止。
然后,我可以看到scp
命令没有在所有文件上完成,程序每次都在第4个文件停止。
root@raspberrypi:~# ./recupFileName.sh
spawn scp -p /root/muonic_data/2017-11-30_15-10-44_P_8294418.33_Q1 marpic@192.168.110.90:/home/marpic/muonic_data/Data_Q1/2017-11-30
marpic@192.168.110.90's password:
2017-11-30_15-10-44_P_8294418.33_Q1 15% 68MB 6.9MB/s 00:53
spawn scp -p /root/muonic_data/2017-11-30_15-10-44_R_8294418.33_Q1 marpic@192.168.110.90:/home/marpic/muonic_data/Data_Q1/2017-11-30
marpic@192.168.110.90's password:
2017-11-30_15-10-44_R_8294418.33_Q1 41% 69MB 8.5MB/s 00:11
spawn scp -p /root/muonic_data/2018-03-07_09-30-57_R_HOURS_Q1 marpic@192.168.110.90:/home/marpic/muonic_data/Data_Q1/2018-03-07
marpic@192.168.110.90's password:
2018-03-07_09-30-57_R_HOURS_Q1 82% 51MB 7.2MB/s 00:01
spawn scp -p /root/muonic_data/2018-04-13_13-23-25_R_HOURS_Q1 marpic@192.168.110.90:/home/marpic/muonic_data/Data_Q1/2018-04-13
marpic@192.168.110.90's password:
2018-04-13_13-23-25_R_HOURS_Q1 100% 6940KB 6.8MB/s 00:01
正如您所看到的,应该有8个文件以100%的准确率复制,但没有错误消息,因此我不知道从哪里开始我的研究。
编辑:
我在我的脚本中添加了“set timeout -1”,但现在脚本只是以100%的准确率复制我的第一个文件,然后停止。任何答案?
root@raspberrypi:~# ./recupFileName.sh
Fichier : 2017-11-30_15-10-44_P_8294418.33_Q1 et repertoire : 2017-11-30
spawn scp -p /root/muonic_data/2017-11-30_15-10-44_P_8294418.33_Q1 marpic@192.168.110.90:/home/marpic/muonic_data/Data_Q1/2017-11-30
marpic@192.168.110.90's password:
2017-11-30_15-10-44_P_8294418.33_Q1 100% 437MB 7.5MB/s 00:58
root@raspberrypi:~#
答案 0 :(得分:1)
问题应该在expect eof
。默认情况下,timeout
为10
秒,因此expect eof
会在10
秒后返回,但scp
仍在运行。
您可以使用更大的timeout
。
选项#1:
# set the default `timeout'
set timeout 3600 ; # or -1 for no timeout
选项#2:
expect -timeout 3600 eof
请注意你的
expect eof { return }
将退出整个脚本,因此foreach
循环仅运行一次,您只需要
expect eof