1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package remote
import (
"bufio"
"fmt"
"log"
"os/exec"
"gscp/internal/config"
)
// GetFiles retrieves the list of files from the remote server
func GetFiles(config config.Configuration) ([]string, error) {
if config.Verbose {
log.Println("Getting remote file list...")
}
cmd := exec.Command("ssh", fmt.Sprintf("%s@%s", config.RemoteUser, config.RemoteHost),
fmt.Sprintf("find '%s' -type f | sed 's|^%s/||'", config.RemotePath, config.RemotePath))
stdout, err := cmd.StdoutPipe()
if err != nil {
return nil, fmt.Errorf("error creating stdout pipe: %v", err)
}
if err := cmd.Start(); err != nil {
return nil, fmt.Errorf("error starting ssh command: %v", err)
}
var files []string
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
file := scanner.Text()
if file != "" {
files = append(files, file)
}
}
if err := scanner.Err(); err != nil {
return nil, fmt.Errorf("error reading ssh output: %v", err)
}
if err := cmd.Wait(); err != nil {
return nil, fmt.Errorf("ssh command failed: %v", err)
}
return files, nil
}
|