Control-M scp 文件路径名包含空格的问题

问题描述 投票:0回答:1

以下是我使用 scp 协议传输两个文件的 shell 脚本。 第二个 scp 语句显示包含空格的源文件目录(请参见第 10 行,我在

Badge\ Docs
中添加了一个反斜杠,表示子文件夹名称为“Badge Docs”(两个单词之间有一个空格)。

copy_data_reports.sh
# Copy revenue file
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx  /data/revenue_bo/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof

# Copy PO_REPORT.xlsx
cd /data/storage/exp/Badge_Docs/
spawn scp -T ftpaccess@prod:"/storage/data/Badge\ Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
interact

当我在 Linux 服务器中运行该脚本时,该脚本可以正常工作。

Revenue.xlsx
PO_REPORT.xlsx
都会在其相应的目标文件夹中拾取/刷新。

在 Linux 中执行 - 它正在工作
[linux_prd]$ ./copy_data_reports.sh
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
ftpaccess@prod's password:
Revenue.xlsx                                                                           100%  130KB   1.5MB/s   00:00
spawn scp -T ftpaccess@prod:"/storage/data//Badge Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
ftpaccess@prod's password:
PO_REPORT.xlsx                                                                         100%   20MB  27.5MB/s   00:00

我们已将

copy_data_reports.sh
设置为通过 Control-M 运行。 Control-M 显示此脚本执行没有问题,但我看到只有“Revenue.xlsx”正在传输,而
 the second file (PO_REPORT.xlsx) is not being transmitted.
我怀疑它可能与原始路径中存在的空间有关第二个 scp 语句(第一个 scp 的原始文件夹路径不包含空格,并且它有效)。

我确保将原始文件夹路径名括在双引号中

(")
并且我保留了反斜杠以指示路径之间有一个空格(“徽章文档”)。有什么我可能错过的吗?

---- 更新 -下面是通过 CONTROL-M 运行 copy_data_reports.sh 生成的日志文件:

spawn scp ftpaccess@asbi-prod:/storage/data/om_project/gpmo/revenue_bo/*Task5050-Revenue.xlsx /data/ASBI/data_files/storage/data/ato_project/gpmo_hc_ggpr/revenue_bo/
ftpaccess@asbi-prod's password:
Task5050-Revenue.xlsx                         100%  130KB  50.3MB/s   00:00
spawn scp -T ftpaccess@asbi-prod:"/storage/data/ato_project/exp_hc/CX Red Badge Docs/CX_OPEN_PO_REPORT.xlsx" /data/ASBI/data_files/storage/data/ato_project/exp_hc/CX_Red_Badge_Docs/
ftpaccess@asbi-prod's password: <eof>

有趣的是,在运行第二个 scp 语句的密码执行时,CONTROL-M 触发的脚本作业似乎突然结束。

从 Linux 运行 scp shell 脚本与通过 CONTROL-M 触发相同的脚本有什么区别吗?我不明白为什么 CONTROL-M 触发的作业提前终止,因为 Control-M 运行的日志文件没有显示任何错误消息。感谢所有有用的意见。

shell expect scp control-m
1个回答
0
投票

有人在上面的评论部分建议将“interact”替换为“expect eof”,Control-M 似乎很喜欢它 - 它终于起作用了。

# Copy revenue file
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx  /data/revenue_bo/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof

# Copy PO_REPORT.xlsx
cd /data/storage/exp/Badge_Docs/
spawn scp -T ftpaccess@prod:"/storage/data/Badge\ Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof     # replacing "interact" -> works with Control-M

Control-M 执行脚本时生成的输出日志 - 现在显示 PO_REPORT.xls 已成功传输:

spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
ftpaccess@prod's password:
Revenue.xlsx                                                                           100%  130KB   1.5MB/s   00:00
spawn scp -T ftpaccess@prod:"/storage/data//Badge Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
ftpaccess@prod's password:
PO_REPORT.xlsx                                                                         100%   20MB  27.5MB/s   00:00
© www.soinside.com 2019 - 2024. All rights reserved.