summaryrefslogtreecommitdiff
path: root/internal/remote/files.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/remote/files.go')
-rw-r--r--internal/remote/files.go48
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
+}