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
49
50
|
package config
import (
"flag"
"fmt"
"os"
)
// Configuration holds all the parameters for the SCP operation
type Configuration struct {
Dest string
RemoteUser string
RemoteHost string
RemotePath string
Parallelism int
LockDir string
CipherOption string
Verbose bool
OnlyListFiles bool
}
// ParseArgs parses command-line arguments and returns a Configuration
func ParseArgs() Configuration {
config := Configuration{
LockDir: "/tmp/scp_lock",
Parallelism: 10,
CipherOption: "aes128-gcm@openssh.com",
}
flag.StringVar(&config.Dest, "d", "", "Destination directory (local)")
flag.StringVar(&config.RemoteUser, "u", "", "Remote username")
flag.StringVar(&config.RemoteHost, "h", "", "Remote hostname or IP")
flag.StringVar(&config.RemotePath, "r", "", "Remote path")
flag.IntVar(&config.Parallelism, "P", 10, "Number of parallel SCP processes")
flag.StringVar(&config.LockDir, "L", "/tmp/scp_lock", "Lock directory")
flag.StringVar(&config.CipherOption, "c", "aes128-gcm@openssh.com", "SSH cipher option")
flag.BoolVar(&config.Verbose, "v", false, "Verbose output")
flag.BoolVar(&config.OnlyListFiles, "l", false, "Only list files to be copied, don't copy")
flag.Parse()
// Check required parameters
if config.Dest == "" || config.RemoteUser == "" || config.RemoteHost == "" || config.RemotePath == "" {
flag.Usage()
fmt.Println("\nRequired flags: -d, -u, -h, -r")
os.Exit(1)
}
return config
}
|