Get the directory name (not a path) of a given file path in Golang

14,312

You can use filepath.Base to get the last element of the directory. For example:

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    paths := []string{
        "/home/arnie/amelia.jpg",
        "/mnt/photos/",
        "rabbit.jpg",
        "/usr/local//go",
    }
    for _, p := range paths {
        dir := filepath.Dir(p)
        parent := filepath.Base(dir)
        fmt.Printf("input: %q\n\tdir: %q\n\tparent: %q\n", p, dir, parent)
    }
}

Returns:

input: "/home/arnie/amelia.jpg"
    dir: "/home/arnie"
    parent: "arnie"
input: "/mnt/photos/"
    dir: "/mnt/photos"
    parent: "photos"
input: "rabbit.jpg"
    dir: "."
    parent: "."
input: "/usr/local//go"
    dir: "/usr/local"
    parent: "local"

(example adapted from the filepath examples)

Share:
14,312
Yami Odymel
Author by

Yami Odymel

aHR0cDovL3Bhc3RlYmluLmNvbS8wc2ZqNkN4TQ==

Updated on July 29, 2022

Comments

  • Yami Odymel
    Yami Odymel over 1 year

    By using the path/filepath package with the following example, you can get the full directory path from a file path.

    package main
    
    import (
        "fmt"
        "path/filepath"
    )
    
    func main() {
        // Output: /path/to/dir
        fmt.Println(filepath.Dir("/path//to/dir/file.ext"))
    }
    

    But is there a Parent function to get the dir from the path? (which is the name of the directory of the file):

    // The `Parent` is what I want,
    // and this is a pseudo-code example, this won't actually work.
    //
    // Output: dir
    fmt.Println(filepath.Parent("/path//to/dir/file.ext"))
    

    If it can't be done with the functions, how do I get the parent's name with RegExp?