使用 ssh sftpg3 进行文件传输

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:\ 目录中 运行ning 这个脚本是 运行ning 没有错误,但我在目标服务器中看不到文件。

你能帮我解决这个文件路径问题吗? 我想从 O:\ 中 运行 它,它会从 C:\ 驱动器中选择目标文件和 sftpg3.exe 并成功进行文件传输(在 ASCII 模式下)。

您可能在第三行插入了 @host,因为您使用的是双引号 ("")。你有没有打开 use strictuse warnings?路径中的 space (</code>) 也可能存在问题。</p> <pre><code>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;

让我们看看我做了什么。

  • 当你tab-complete a path like C:\Program Files\foo in Windows cmd, it usually wrapping them in double quotes if there's a space 在路径里面。所以我们使用 q operator, which is equivalent to single quotes, and put double quotes inside. That also gives us the benefit that we don't have to escape the backslash \. Also see quote-like operators in perlop.
  • 源路径也是如此。
  • system 允许您将所有参数传递给您想要 运行 的程序作为自身的参数,并将处理引用
  • "user@host:" 中的双引号将尝试将 @host 展开为数组。那是行不通的,因为它没有定义。所以有一个警告,您可能没有看到,因为您没有 use strictuse warnings。使用单引号代替双引号。
  • 我使用 $sftp_path 而不是 $sftpPath 因为 Perl 中有使用下划线而不使用大写字母的约定。我们喜欢骆驼,但不喜欢我们的变量名。 :)

试试下面的代码

my $cmd="sftpg3.exe " . "$src_path user@host:"; 
system("C:\Program Files\Client\");
system($cmd);

谢谢。