使用 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 strict
和 use 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 strict
和 use warnings
。使用单引号代替双引号。
- 我使用
$sftp_path
而不是 $sftpPath
因为 Perl 中有使用下划线而不使用大写字母的约定。我们喜欢骆驼,但不喜欢我们的变量名。 :)
试试下面的代码
my $cmd="sftpg3.exe " . "$src_path user@host:";
system("C:\Program Files\Client\");
system($cmd);
谢谢。
我正在编写一个 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 strict
和 use 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 strict
和use warnings
。使用单引号代替双引号。- 我使用
$sftp_path
而不是$sftpPath
因为 Perl 中有使用下划线而不使用大写字母的约定。我们喜欢骆驼,但不喜欢我们的变量名。 :)
试试下面的代码
my $cmd="sftpg3.exe " . "$src_path user@host:";
system("C:\Program Files\Client\");
system($cmd);
谢谢。