Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "os"
  5. "fmt"
  6. "regexp"
  7. "strings"
  8. "io"
  9. // "io/ioutil"
  10. )
  11.  
  12. func main() {
  13. if len(os.Args) != 3 {
  14. howto()
  15. } else {
  16. var src []string
  17. var dest string
  18. for _, slice := range os.Args[1:] {
  19. isOk, filePath := getName(slice)
  20. if slice == os.Args[len(os.Args)-1] && isOk {
  21. dest := filePath
  22. fmt.Println("destination", dest)
  23. } else {
  24. src = append(src, filePath)
  25. }
  26. }
  27. for _, source := range src {
  28. copyFile(source, dest)
  29. fmt.Println("source", source)
  30. }
  31. }
  32. }
  33.  
  34. func check(e error) {
  35. if e != nil {
  36. panic(e)
  37. }
  38. }
  39.  
  40. func howto() {
  41. cmd := os.Args[0]
  42. fmt.Printf("Neyi nereye kopyalıyoruz?\n\nKullanım:\n %s sunucu1:/root/dosya1 sunucu2:/tmp/\n" , cmd)
  43. }
  44. func getName(slice string) (bool, string){
  45. var pathName string
  46. noerr := true
  47. if strings.Contains(slice, ":") {
  48. path := regexp.MustCompile(":").Split(slice, 2)
  49. pathName = fmt.Sprintf(strings.Replace(path[0], path[0], fmt.Sprintf("/opsw/Server/@/%s/files/root", path[0]), -1) + path[1])
  50. } else {
  51. if _, err := os.Stat(slice); err != nil {
  52. noerr = false
  53. } else {
  54. pathName = fmt.Sprintf(slice)
  55. }
  56. }
  57. return noerr, pathName
  58. }
  59.  
  60. func copyFile(src, dst string) (err error) {
  61. sfi, err := os.Stat(src)
  62. if err != nil {
  63. return
  64. }
  65. if !sfi.Mode().IsRegular() {
  66. // cannot copy non-regular files (e.g., directories,
  67. // symlinks, devices, etc.)
  68. return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String())
  69. }
  70. dfi, err := os.Stat(dst)
  71. if err != nil {
  72. if !os.IsNotExist(err) {
  73. return
  74. }
  75. } else {
  76. if !(dfi.Mode().IsRegular()) {
  77. return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String())
  78. }
  79. if os.SameFile(sfi, dfi) {
  80. return
  81. }
  82. }
  83. if err = os.Link(src, dst); err == nil {
  84. return
  85. }
  86. err = copyFileContents(src, dst)
  87. return
  88. }
  89.  
  90. func copyFileContents(src, dst string) (err error) {
  91. in, err := os.Open(src)
  92. if err != nil {
  93. return
  94. }
  95. defer in.Close()
  96. out, err := os.Create(dst)
  97. if err != nil {
  98. return
  99. }
  100. defer func() {
  101. cerr := out.Close()
  102. if err == nil {
  103. err = cerr
  104. }
  105. }()
  106. if _, err = io.Copy(out, in); err != nil {
  107. return
  108. }
  109. err = out.Sync()
  110. return
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement