【问题标题】:Why doesn't this program copy all my files, using scp?为什么这个程序不使用 scp 复制我的所有文件?
【发布时间】:2018-11-01 11:59:31
【问题描述】:

我编写了一个小程序,在第一种情况下,它对文件列表和目录名称进行切片,以便得到文件列表和目录列表。

#!/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% 的准确率复制,但没有错误消息,所以我不知道从哪里开始研究。

编辑:

我在脚本中添加了“设置超时 -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:~# 

【问题讨论】:

  • 然后停止”是什么意思?退出或只是阻塞在那里?
  • 退出,我正在编辑放屏幕
  • expect eof { return } 更改为 expect eof
  • 我期待原因是这个'{return}',它是!再次感谢:)
  • 仅供参考:看看sexpect,您可以使用它仅使用 shell 代码编写“预期”脚本。

标签: list expect scp


【解决方案1】:

问题应该出在expect eof。默认情况下,timeout10 秒,因此 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多