繁体   English   中英

使用 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:\\ 目录运行此脚本时,它运行没有错误,但我在目标服务器中看不到该文件。

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

您可能在第三行插入了@host ,因为您使用的是双引号 ( "" )。 您是否打开了use strictuse 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;

让我们看看我做了什么。

  • 当您在 Windows cmd 中使用Tab 键完成像C:\\Program Files\\foo这样的路径时,如果路径中有空格,它通常会将它们用双引号括起来。 所以我们使用q操作符,相当于单引号,里面放双引号。 这也给了我们一个好处,我们不必逃避反斜杠\\ 另请参阅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);

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM