Jika kita melakukan backup dengan program bawaan dari Windows, biasanya nama file dari hasil backup tersebut akan berubah. Windows akan melakukan penambahan timestamp dibelakang nama file. Hal ini mengakibatkan beberapa program tidak dapat berjalan jika namanya tidak diubah seperti semula. Oleh karena itu, dibuat program dengan golang untuk menghapus timestamp dari nama file. Gambar dibawah ini adalah contoh dimana nama file telah berubah.
Untuk memperbaiki hal tersebut, kita dapat membuat program dengan bahasa Go. Pertama kita buka editor kesayangan kita dan kita buat file baru bernama main.go.
Variabel currentDir berfungsi sebagai penanda direktori yang sedang aktif / dicek.
Import
Kita memerlukan beberapa paket untuk program ini, seperti os, strings, fmt, dll. Oleh karena itu, kita perlu meng-import paket tersebut pada kode kita.
package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"strings"
)
Deklarasi Variabel
var flagPath = flag.String("path", "", "path of file want to rename")
var currentDir = ""
Variabel flagPath berfungsi sebagai parameter inputan untuk direktori yang akan di rename. Hal ini memungkinkan kita untuk menjalankan program dengan cara program.exe -path "direktori".Variabel currentDir berfungsi sebagai penanda direktori yang sedang aktif / dicek.
Fungsi match()
func match(s string) string {
i := strings.Index(s, " (2017")
if i >= 0 {
j := strings.Index(s, "UTC)")
if j >= 0 {
return s[i : j+4]
}
}
return ""
}
Fungsi ini berfungsi untuk mengambil nama dari timestamp yang dibuat oleh windows. Karena timestamp ini berbeda-beda, maka kita gunakan batas, dimana batas awal adalah " (2017" dan akhir adalah "UTC)". Fungsi ini akan mengeluarkan string berupa timestamp dari suatu file, yang nantinya akan digunakan untuk di replace.Fungsi partialRename()
func partialRename(path string, f os.FileInfo, err error) (e error) {
if currentDir != filepath.Dir(path) {
currentDir = filepath.Dir(path)
fmt.Println("\n" + "--------------------------------------")
fmt.Println("Go to directory " + currentDir + " ...")
fmt.Println("--------------------------------------" + "\n")
}
if strings.Contains(f.Name(), " (2017") && strings.Contains(f.Name(), "UTC)") {
base := filepath.Base(path) // file name
dir := filepath.Dir(path) // directory name
r := match(base)
renameTo := filepath.Join(dir, strings.Replace(base, r, "", 1))
fmt.Println("Renaming on file " + path + " ...")
os.Rename(path, renameTo)
fmt.Println("File has been renamed to : " + renameTo)
}
return
}
Fungsi ini berfungsi untuk melakukan rename file. Rename dilakukan dengan cara mereplace string yang kita dapatkan dari fungsi match() dengan string kosong.Main Program
func init() {
flag.Parse()
}
func main() {
if *flagPath == "" {
flag.Usage()
os.Exit(0)
}
filepath.Walk(*flagPath, partialRename)
}
Fungsi filepath.Walk() berfungsi untuk mengunjungi file dari masing-masing folder.
Full Program
Kode program selengkapnya dapat diakses pada link github berikut.
Silahkan tulis komentar pada kolom komentar di bawah. Komentar yang mengandung SARA dan spam akan dihapus.
EmoticonEmoticon