| --- |
| page_title: dirname - Functions - Configuration Language |
| description: The dirname function removes the last portion from a filesystem path. |
| --- |
| |
| # `dirname` Function |
| |
| `dirname` takes a string containing a filesystem path and removes the last |
| portion from it. |
| |
| This function works only with the path string and does not access the |
| filesystem itself. It is therefore unable to take into account filesystem |
| features such as symlinks. |
| |
| If the path is empty then the result is `"."`, representing the current |
| working directory. |
| |
| The behavior of this function depends on the host platform. On Windows systems, |
| it uses backslash `\` as the path segment separator. On Unix systems, the slash |
| `/` is used. The result of this function is normalized, so on a Windows system |
| any slashes in the given path will be replaced by backslashes before returning. |
| |
| Referring directly to filesystem paths in resource arguments may cause |
| spurious diffs if the same configuration is applied from multiple systems or on |
| different host operating systems. We recommend using filesystem paths only |
| for transient values, such as the argument to [`file`](/language/functions/file) (where |
| only the contents are then stored) or in `connection` and `provisioner` blocks. |
| |
| ## Examples |
| |
| ``` |
| > dirname("foo/bar/baz.txt") |
| foo/bar |
| ``` |
| |
| ## Related Functions |
| |
| * [`basename`](/language/functions/basename) returns _only_ the last portion of a filesystem |
| path, discarding the portion that would be returned by `dirname`. |