[英]file transfer using ssh sftpg3
我正在编写一个 Perl 脚本来使用 SSH sftpg3.exe 进行安全的文件传输
但是我在访问源文件时遇到问题。 该脚本能够在从目录运行时从 C:\\xx\\t.txt 中选取文件
它没有显示错误 C:\\Program is not a valid command。
my $sftpPath="C:\\Program Files\\client";
my $srcPath="C:\\xx\\test.txt";
my $trgCommand=$sftpPath." -D $srcPath user@host:/tmp/";
my $result=system("$trgCommand");
从 C:\\ 目录运行此脚本时,它运行没有错误,但我在目标服务器中看不到该文件。
你能帮我解决这个文件路径问题吗? 我想从 O:\\ 运行它,它将从 C:\\ 驱动器中选择目标文件和 sftpg3.exe 并成功进行文件传输(以 ASCII 模式)。
您可能在第三行插入了@host
,因为您使用的是双引号 ( ""
)。 您是否打开了use strict
和use warnings
? 空间也可能有问题( ) 在路径中。
use strict;
use warnings;
use feature 'say';
my $sftp_path = q{"C:\Program Files\Client\sftpg3.exe"};
my $src_path = 'C:\xx\test.txt';
my $result = system( $sftp_path, '-D', $src_path, 'user@host:/tmp/' );
say $result;
让我们看看我做了什么。
C:\\Program Files\\foo
这样的路径时,如果路径中有空格,它通常会将它们用双引号括起来。 所以我们使用q
操作符,相当于单引号,里面放双引号。 这也给了我们一个好处,我们不必逃避反斜杠\\
。 另请参阅perlop 中的类似引号的运算符。system
允许您将所有参数传递给要运行的程序作为其自身的参数,并将处理引用"user@host:"
的双引号将尝试将@host
扩展为数组。 这不起作用,因为它没有定义。 所以有一个你可能没有看到的警告,因为你没有use strict
和use warnings
。 使用单引号代替双引号。$sftp_path
而不是$sftpPath
因为 Perl 中有使用下划线而不是大写字母的约定。 我们喜欢骆驼,但不是在我们的变量名中。 :)试试下面的代码
my $cmd="sftpg3.exe " . "$src_path user@host:";
system("C:\\Program Files\\Client\");
system($cmd);
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.