Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "os"
- "fmt"
- "regexp"
- "strings"
- "io"
- // "io/ioutil"
- )
- func main() {
- if len(os.Args) != 3 {
- howto()
- } else {
- var src []string
- var dest string
- for _, slice := range os.Args[1:] {
- isOk, filePath := getName(slice)
- if slice == os.Args[len(os.Args)-1] && isOk {
- dest := filePath
- fmt.Println("destination", dest)
- } else {
- src = append(src, filePath)
- }
- }
- for _, source := range src {
- copyFile(source, dest)
- fmt.Println("source", source)
- }
- }
- }
- func check(e error) {
- if e != nil {
- panic(e)
- }
- }
- func howto() {
- cmd := os.Args[0]
- fmt.Printf("Neyi nereye kopyalıyoruz?\n\nKullanım:\n %s sunucu1:/root/dosya1 sunucu2:/tmp/\n" , cmd)
- }
- func getName(slice string) (bool, string){
- var pathName string
- noerr := true
- if strings.Contains(slice, ":") {
- path := regexp.MustCompile(":").Split(slice, 2)
- pathName = fmt.Sprintf(strings.Replace(path[0], path[0], fmt.Sprintf("/opsw/Server/@/%s/files/root", path[0]), -1) + path[1])
- } else {
- if _, err := os.Stat(slice); err != nil {
- noerr = false
- } else {
- pathName = fmt.Sprintf(slice)
- }
- }
- return noerr, pathName
- }
- func copyFile(src, dst string) (err error) {
- sfi, err := os.Stat(src)
- if err != nil {
- return
- }
- if !sfi.Mode().IsRegular() {
- // cannot copy non-regular files (e.g., directories,
- // symlinks, devices, etc.)
- return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String())
- }
- dfi, err := os.Stat(dst)
- if err != nil {
- if !os.IsNotExist(err) {
- return
- }
- } else {
- if !(dfi.Mode().IsRegular()) {
- return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String())
- }
- if os.SameFile(sfi, dfi) {
- return
- }
- }
- if err = os.Link(src, dst); err == nil {
- return
- }
- err = copyFileContents(src, dst)
- return
- }
- func copyFileContents(src, dst string) (err error) {
- in, err := os.Open(src)
- if err != nil {
- return
- }
- defer in.Close()
- out, err := os.Create(dst)
- if err != nil {
- return
- }
- defer func() {
- cerr := out.Close()
- if err == nil {
- err = cerr
- }
- }()
- if _, err = io.Copy(out, in); err != nil {
- return
- }
- err = out.Sync()
- return
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement