summaryrefslogtreecommitdiff
path: root/internal/remote
diff options
context:
space:
mode:
authorhaturatu <taro@eyes4you.org>2025-03-17 00:29:44 +0900
committerhaturatu <taro@eyes4you.org>2025-03-17 00:29:44 +0900
commitd14075115766ac0dec86f8a9a5208d1834e0c018 (patch)
tree55876f5ae188de53fd81680002a9132528f17717 /internal/remote
parentdd932e5db50a4610fa59e08cd4aa2ee11d5eeb4d (diff)
add: gscp
Diffstat (limited to 'internal/remote')
-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
+}