从FTP服务器递归下载文件

时间:2016-10-13 16:36:32

标签: powershell

大家好我不熟悉shell脚本,我试图根据FTP服务器的文件名下载根目录下的所有文件和子文件夹中的文件。因为我希望下载文件名匹配的文件,因为我的路径将始终指向根目录,根目录包含文本文件和子文件夹,子文件夹包含文本文件。

我找到了一个示例,可以将文本文件从ftp服务器下载到本地,但我发现的示例只是从根目录下载文本文件,它不扫描子文件夹而不是在子文件夹中获取文件。

这是我试过的例子

extract_line

我尝试了一个模块PSFTP模块函数,比如Get-ftpchilditem函数和递归,但它对我没用。

请帮助我将FTP服务器的根文件夹和子文件夹中的文件传输到本地系统。

1 个答案:

答案 0 :(得分:1)

我过去使用WinSCP和SFTP完成了它。示例如下。这使用基本上通过SSH的SFTP SCP。我相信您可以将WInSCP协议更改为ftp并尝试不同的组合。希望这对你有所帮助。将FileMasks更改为仅包含.txt,这将通过子文件夹。此外,您还需要WinSCPnet.dll和WinSCP.exe,您可以从WinSCP站点轻松下载。下载“.Net Assembly / COM Library”并将脚本和所需文件保存在同一文件夹中,并更新脚本中的路径。祝你好运。

# Load WinSCP .NET assembly
Add-Type -Path "C:\Users\administrator.AD\Documents\WinSCP    Script\WinSCPnet.dll"


$hostname = "ftp.xyz.net"
$user = "me"
$pass = "mypassword"
$sfolder = "/home/me"
$dfolder = "C:\tmp"
$sshHostKeyFingerprint = "ssh-rsa 2048 eb:2c:f9:ab:19:2e:0c:22:02:d4:8f:64:44:75:ec:04"
$mask = "*.jpg;*.jpeg;*.png;*.tiff;*.txt"
####################### END USER CONFIGURABLE SETTINGS #########################

# Main script
# Setup session options

$sessionOptions = New-Object WinSCP.SessionOptions -Property @{

Protocol = [WinSCP.Protocol]::Scp

HostName = $hostname

UserName = $user

Password = $pass

SshHostKeyFingerprint = $sshHostKeyFingerprint

}


$session = New-Object WinSCP.Session

$transferOptions = New-Object WinSCP.TransferOptions

$transferOptions.FileMask = "*.jpg; *.jpeg; *.png; *.tiff;"

try

{
# Will continuously report progress of synchronization

$session.add_FileTransferred( { FileTransferred($_) } )

# Connect

$session.Open($sessionOptions)

# Synchronize files

$synchronizationResult = $session.SynchronizeDirectories(

[WinSCP.SynchronizationMode]::Local,$dfolder, $sfolder, $False, $False, 1, $transferOptions)

# Throw on any error

$synchronizationResult.Check()

}

finally

{

# Disconnect, clean up

$session.Dispose()

}