A type based approach to working with filesystem paths in julia



Build Status codecov

FilePaths.jl provides a type based approach to working with filesystem paths in julia.


FilePaths.jl is registered, so you can to use Pkg.add to install it.

julia> Pkg.add("FilePaths")


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/")


julia> p"~/repos/FilePaths.jl/"

Human readable file status info:

julia> stat(p"README.md")
  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")

julia> m - readable(:ALL)

julia> m + executable(:ALL)

julia> chmod(p"README.md", "+x")

julia> mode(p"README.md")

julia> chmod(p"README.md", m)

julia> m = mode(p"README.md")

julia> chmod(p"README.md", user=(READ+WRITE+EXEC), group=(READ+WRITE), other=READ)

julia> mode(p"README.md")

Reading and writing directly to file paths:

julia> write(p"testfile", "foobar")

julia> read(p"testfile")

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


  • cross platform chmod and chown

First Commit


Last Touched

7 days ago


64 commits

Used By: