GetFile or GetFiles with * (wodSFTP / wodSFTP.NET / wodSFTPdll)
I want to use GetFile(s) for copy one file from a linux diretory to my Windows computer.
The problem is that in linux diretory exist more that 50,000 files, and the other problem is that I don´t know the exact name of the file, just know tha the file finist with some unique ID.
Example:
SFTP.GetFile C:DirectoryMynewnamefile , /LinuxDirectory/*UniqueID
How can I do for copy the file, because just wori if I write the comple name of the file in my linux server.
Thanks for you help,
Rodrigo
Re: GetFile or GetFiles with *
Hi Rodrigo,
You can try using GetFiles Method and LoopItem Event.
GetFiles Method will trigger LoopItem Event before each file will be downloaded. You can then in LopItem Event skip files you don't want to download and download only files you need with Unique ID.
More help for LoopItem Event you can find here:
http://www.weonlydo.com/SFTP/Help/wodSFTPLib~wodSFTP~LoopItem_EV.html
You can find in help file example how to skip items.
Let us know how it goes.
Regards,
Drazen
Re: GetFile or GetFiles with *
Drazen:
The problem of LooItem is tha is too slow when I have 100,000 files.
Whe need to loop all file for locate the file that I need to download.
What happen if I need to download just one file in the directory that have 100,000 files?
Thanks,
Rodrigo Cuadra
Re: GetFile or GetFiles with *
Hi Rodrigo,
Sorry for slower reply it's weekend here.
I understand your problem. Unfortunately there is no custom list command in SFTP protocol that will list only certain files. You are searching for some unique word inside filename and until all files is listed you cannot be sure that all such files is downloaded.
However to workaround this problem. You can connect to that server using SSH2 protocol, send command that will list only files with certain unique word in filename (that will take MUCH less time) and download such files.
To do that you should combine our two components. wodSFTP ActiveX component for downloading files and wodSSH ActiveX component for collecting files.
wodSSH will connect to your server and send command that will list files only with unique word inside filename. Then you can store such files in collection, connect with wodSFTP to server and download that files using GetFile Method.
Here is code snippet.
[code]Dim ssh1 As wodSSHCom
Set ssh1 = New wodSSHCom
ssh1.HostName = hostname
ssh1.Login = login
ssh1.Password = password
ssh1.Protocol = SSH2
ssh1.Blocking = True
ssh1.Timeout = 30
ssh1.Connect
Dim output As String
Dim collFile As Collection
Set collFile = New Collection
ssh1.WaitFor ( regex:[$ #>] $ )
ssh1.DataReady = 0
output = ssh1.Execute( cd drazen + vbLf, regex:[$ #>] $ ) 'go in sub directory if needed
ssh1.DataReady = 0
output = ssh1.Execute( find . -maxdepth 1 -name '*txt' -printf ' f\n' + vbLf, regex:[$ #>] $ ) 'execute command that will search for files that have txt inside filename
ssh1.Disconnect
'---------------------------------------------------------
Dim pos As Integer
Dim entry() As String
entry = Split(output, vbCrLf, , vbTextCompare)
pos = 0
Do While pos < UBound(entry)
If Trim$(entry(pos)) <> Then
If InStr(1, entry(pos), txt ) > 0 Then
collFile.Add entry(pos) 'put files in collection
End If
End If
pos = pos + 1
Loop
'---------------------------------------------------------
Dim sftp1 As wodSFTPCom
Set sftp1 = New wodSFTPCom
sftp1.HostName = hostname
sftp1.Login = login
sftp1.Password = password
sftp1.Blocking = True
sftp1.Timeout = 30
sftp1.Connect
Dim i As Integer
For i = 1 To collFile.Count
sftp1.GetFile c:\something\ & collFile.Item(i), /home/something/ & collFile.Item(i) 'download files
Next i
sftp1.Disconnect[/code]
Here is link if you need more help for Unix find command:
http://content.hccfl.edu/pollock/Unix/FindCmd.htm
Let us know how it goes.
Regards,
Drazen