From d14075115766ac0dec86f8a9a5208d1834e0c018 Mon Sep 17 00:00:00 2001 From: haturatu Date: Mon, 17 Mar 2025 00:29:44 +0900 Subject: add: gscp --- internal/remote/files.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 internal/remote/files.go (limited to 'internal/remote/files.go') 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 +} -- cgit v1.2.3