diff options
author | haturatu <taro@eyes4you.org> | 2025-03-17 00:29:44 +0900 |
---|---|---|
committer | haturatu <taro@eyes4you.org> | 2025-03-17 00:29:44 +0900 |
commit | d14075115766ac0dec86f8a9a5208d1834e0c018 (patch) | |
tree | 55876f5ae188de53fd81680002a9132528f17717 /internal/remote | |
parent | dd932e5db50a4610fa59e08cd4aa2ee11d5eeb4d (diff) |
add: gscp
Diffstat (limited to 'internal/remote')
-rw-r--r-- | internal/remote/files.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/internal/remote/files.go b/internal/remote/files.go new file mode 100644 index 0000000..5b89811 --- /dev/null +++ b/internal/remote/files.go @@ -0,0 +1,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 +} |