[Go語言] 移動檔案到別的目錄


mv 這個shell指令在Linux系統裡用來移動檔案。我想要在Go語言程式碼裡直接移動檔案, 所以我搜尋了 golang os.Move [1] 然後發現 os.Rename 是我所需要的方法。 讓我們試看看它是如何運作的。

如下,有一個檔案跟一個目錄:

.
├── hello.txt
└── testdir/

我想要移動 hello.txttestdir/ 目錄下,我寫了下面的程式碼:

package main

import (
      "os"
)

func main() {
      err := os.Rename("hello.txt", "testdir/")
      if err != nil {
              panic(err)
      }
}

看起來很合理,因為這是我們在Linux shell利用 mv 指令的方式。當我運行Go程式碼時, 發生了panic:

panic: rename hello.txt testdir/: file exists

所以我們不能只是把 testdir/ 放在 os.Rename 的新路徑參數。 我們必須指定完整的新路徑,包含檔名:

package main

import (
      "os"
)

func main() {
      err := os.Rename("hello.txt", "testdir/hello.txt")
      if err != nil {
              panic(err)
      }
}

然後我們就能得到我們想要的結果:

.
└── testdir/
    └── hello.txt

Tested on: Ubuntu Linux 17.10, Go 1.10


References:

[1]
[2]func Rename - os - The Go Programming Language
[3]