大家好我不熟悉shell脚本,我试图根据FTP服务器的文件名下载根目录下的所有文件和子文件夹中的文件。因为我希望下载文件名匹配的文件,因为我的路径将始终指向根目录,根目录包含文本文件和子文件夹,子文件夹包含文本文件。
我找到了一个示例,可以将文本文件从ftp服务器下载到本地,但我发现的示例只是从根目录下载文本文件,它不扫描子文件夹而不是在子文件夹中获取文件。
这是我试过的例子
extract_line
我尝试了一个模块PSFTP模块函数,比如Get-ftpchilditem函数和递归,但它对我没用。
请帮助我将FTP服务器的根文件夹和子文件夹中的文件传输到本地系统。
答案 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()
}