func FileOpen(s *sftp.Client, name string) (*File, error) { fd, err := s.Open(name) if err != nil { return &File{}, err } return &File{fd: fd}, nil }
func (conn *SshConfig) GetFile(rPath, lPath string, sftp *sftp.Client, env *Enviroment) error { remoteFile, err := sftp.Open(rPath) if err != nil { return err } localFile, err := os.OpenFile(lPath, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0755) if err != nil { return err } defer localFile.Close() if env.filter.on { // filter lines in the file that match the filter key fmt.Printf("downloading and applying filter to %s:%s\n", conn.Name, rPath) scanner := bufio.NewScanner(remoteFile) for scanner.Scan() { if LineMatch(scanner.Bytes(), env.filter.key) { if _, err = localFile.Write([]byte(scanner.Text() + "\n")); err != nil { return err } } } srcStat, err := localFile.Stat() if err != nil { return err } if (srcStat.Size()) == 0 { localFile.Write([]byte("No matches found.")) } return nil } srcStat, err := remoteFile.Stat() if err != nil { return err } writer := io.Writer(localFile) io.Copy(writer, remoteFile) fmt.Printf("%s @filesize %dB <-- %s\n", lPath, srcStat.Size(), PathChomp(rPath)) localFile.Sync() return nil }