FilePaths.jl
FilePaths.jl provides a type based approach to working with filesystem paths in julia.
Intallation:
FilePaths.jl is registered, so you can to use Pkg.add to install it.
julia> Pkg.add("FilePaths")
Usage:
julia> using FilePaths
The first important difference about working with paths in FilePaths.jl is that a path is an immutable list (Tuple) of strings, rather than simple a string.
Path creation:
julia> Path("~/repos/FilePaths.jl/")
Paths.PosixPath(("~","repos","FilePaths.jl",""))
or
julia> p"~/repos/FilePaths.jl/"
Paths.PosixPath(("~","repos","FilePaths.jl",""))
Human readable file status info:
julia> stat(p"README.md")
Status(
device = 16777220,
inode = 48428965,
mode = -rw-r--r--,
nlink = 1,
uid = 501,
gid = 20,
rdev = 0,
size = 1880 (1.8K),
blksize = 4096 (4.0K),
blocks = 8,
mtime = 2016-02-16T00:49:27,
ctime = 2016-02-16T00:49:27,
)
Working with permissions:
julia> m = mode(p"README.md")
-rw-r--r--
julia> m - readable(:ALL)
--w-------
julia> m + executable(:ALL)
-rwxr-xr-x
julia> chmod(p"README.md", "+x")
julia> mode(p"README.md")
-rwxr-xr-x
julia> chmod(p"README.md", m)
julia> m = mode(p"README.md")
-rw-r--r--
julia> chmod(p"README.md", user=(READ+WRITE+EXEC), group=(READ+WRITE), other=READ)
julia> mode(p"README.md")
-rwxrw-r--
Reading and writing directly to file paths:
julia> write(p"testfile", "foobar")
6
julia> read(p"testfile")
"foobar"
All the standard methods for working with paths in base julia exist in the FilePaths.jl. The following describes the rough mapping of method names. Use ? at the REPL to get the documentation and arguments as they may be different than the base implementations.
| Base | FilePaths.jl |
|---|---|
| pwd() | cwd() |
| homedir() | home() |
| cd() | cd() |
| joinpath() | joinpath() |
| basename() | basename() |
| splitext(basename())[1] | filename |
| splitext(basename())[2] | extension |
| N/A | extensions |
| ispath | exists |
| realpath | real |
| normpath | norm |
| abspath | abs |
| relpath | relative |
| stat | stat |
| lstat | lstat |
| filemode | mode |
| mtime | modified |
| ctime | created |
| isdir | isdir |
| isfile | isfile |
| islink | islink |
| issocket | issocket |
| isfifo | isfifo |
| ischardev | ischardev |
| isblockdev | isblockdev |
| isexecutable (deprecated) | isexecutable |
| iswritable (deprecated) | iswritable |
| isreadable (deprecated) | isreadable |
| ismount | ismount |
| isabspath | isabs |
| splitdrive()[1] | drive |
| N/A | root |
| expanduser | expanduser |
| mkdir | mkdir |
| mkpath | N/A (use mkdir) |
| symlink | symlink |
| cp | copy |
| mv | move |
| rm | remove |
| touch | touch |
| tempname | tmpname |
| tempdir | tmpdir |
| mktemp | mktmp |
| mktempdir | mktmpdir |
| chmod | chmod (recursive unix-only) |
| chown (unix only) | chown (unix only) |
| N/A | read |
| N/A | write |
TODO:
- cross platform chmod and chown