1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/path.R
\name{path_math}
\alias{path_math}
\alias{path_real}
\alias{path_split}
\alias{path_join}
\alias{path_abs}
\alias{path_norm}
\alias{path_rel}
\alias{path_common}
\alias{path_has_parent}
\title{Path computations}
\usage{
path_real(path)
path_split(path)
path_join(parts)
path_abs(path, start = ".")
path_norm(path)
path_rel(path, start = ".")
path_common(path)
path_has_parent(path, parent)
}
\arguments{
\item{path}{A character vector of one or more paths.}
\item{parts}{A character vector or a list of character vectors, corresponding
to split paths.}
\item{start}{A starting directory to compute the path relative to.}
\item{parent}{The parent path.}
}
\value{
The new path(s) in an \code{fs_path} object, which is a character vector
that also has class \code{fs_path}. Except \code{path_split()}, which returns a list
of character vectors of path components.
}
\description{
All functions apart from \code{path_real()} are purely path computations, so the
files in question do not need to exist on the filesystem.
}
\section{Functions}{
\itemize{
\item \code{path_real}: returns the canonical path, eliminating any symbolic
links and the special references \code{~}, \code{~user}, \code{.}, and \code{..}, , i.e. it
calls \code{path_expand()} (literally) and \code{path_norm()} (effectively).
\item \code{path_split}: splits paths into parts.
\item \code{path_join}: joins parts together. The inverse of \code{\link[=path_split]{path_split()}}.
See \code{\link[=path]{path()}} to concatenate vectorized strings into a path.
\item \code{path_abs}: returns a normalized, absolute version of a path.
\item \code{path_norm}: eliminates \code{.} references and rationalizes up-level
\code{..} references, so \code{A/./B} and \code{A/foo/../B} both become \code{A/B}, but \code{../B}
is not changed. If one of the paths is a symbolic link, this may change the
meaning of the path, so consider using \code{path_real()} instead.
\item \code{path_rel}: computes the path relative to the \code{start} path,
which can be either an absolute or relative path.
\item \code{path_common}: finds the common parts of two (or more) paths.
\item \code{path_has_parent}: determine if a path has a given parent.
}}
\examples{
\dontshow{.old_wd <- setwd(tempdir())}
dir_create("a")
file_create("a/b")
link_create(path_abs("a"), "c")
# Realize the path
path_real("c/b")
# Split a path
parts <- path_split("a/b")
parts
# Join it together
path_join(parts)
# Find the absolute path
path_abs("..")
# Normalize a path
path_norm("a/../b\\\\c/.")
# Compute a relative path
path_rel("/foo/abc", "/foo/bar/baz")
# Find the common path between multiple paths
path_common(c("/foo/bar/baz", "/foo/bar/abc", "/foo/xyz/123"))
# Cleanup
dir_delete("a")
link_delete("c")
\dontshow{setwd(.old_wd)}
}
\seealso{
\code{\link[=path_expand]{path_expand()}} for expansion of user's home directory.
}
|