Путь
Этот модуль предоставляет удобные функции для работы с или получения путей к файлам в файловой системе.
Функции в этом модуле могут принимать в качестве аргумента данные символов (т.е. строку или список символов/строку) и всегда возвращают строку (кодированную в UTF-8).
Большинство функций в этом модуле не взаимодействуют с файловой системой, за исключением нескольких функций, которые требуют этого (например, wildcard/2 и expand/1).
Обзор
Типы
Функции
- absname(path)
Преобразует заданный путь в абсолютный. В отличие от
expand/1, не предпринимается попытка разрешить..,.или~.- absname(path, relative_to)
Строит путь от
relative_toдоpath.- basename(path)
Возвращает последнюю составляющую пути или сам путь, если он не содержит разделителей каталогов.
- basename(path, extension)
Возвращает последнюю составляющую
pathсоextensionудаленной.- dirname(path)
Возвращает составляющую каталога
path.- expand(path)
Преобразует путь в абсолютный и расширяет любые
.и..символы и ведущий~.- expand(path, relative_to)
Расширяет путь относительно пути, заданного во втором аргументе, расширяя любые
.и..символы.- extname(path)
Возвращает расширение последней составляющей
path.- join(list)
Объединяет список путей.
- join(left, right)
Объединяет два пути.
- relative(name)
Преобразует путь в относительный путь.
- relative_to(path, from)
Возвращает данный
pathотносительно данного путиfrom.- relative_to_cwd(path)
Удобный способ получить путь, относительный к текущей рабочей директории.
- rootname(path)
Возвращает
pathс удаленнойextension.- rootname(path, extension)
Возвращает
pathс удаленнойextension.- split(path)
Разделяет путь на список по разделителю пути.
- type(name)
Возвращает тип пути.
- wildcard(glob, opts \\ [])
Проходит по путям в соответствии с заданным выражением
globи возвращает список совпадений.
Типы
t()
Specs
t() :: IO.chardata()
Функции
absname(path)
Спецификации
absname(t()) :: binary()
Преобразует заданный путь в абсолютный. В отличие от expand/1, не производится попытка разрешения .., . или ~.
Примеры
Операционные системы семейства Unix
Path.absname("foo")
#=> "/usr/local/foo"
Path.absname("../x")
#=> "/usr/local/../x"
Windows
Path.absname("foo")
#=> "D:/usr/local/foo"
Path.absname("../x")
#=> "D:/usr/local/../x" absname(path, relative_to)
Спецификации
absname(t(), t()) :: binary()
Строит путь от relative_to до path.
Если path уже является абсолютным путём, relative_to игнорируется. См. также relative_to/2.
В отличие от expand/2, не производится попытка разрешения .., . или ~.
Примеры
iex> Path.absname("foo", "bar")
"bar/foo"
iex> Path.absname("../x", "bar")
"bar/../x" basename(path)
Спецификации
basename(t()) :: binary()
Возвращает последнюю компоненту пути или сам путь, если он не содержит разделителей каталогов.
Примеры
iex> Path.basename("foo")
"foo"
iex> Path.basename("foo/bar")
"bar"
iex> Path.basename("/")
"" basename(path, extension)
Спецификации
basename(t(), t()) :: binary()
Возвращает последнюю компоненту path с удалённым extension.
Эта функция должна использоваться для удаления определённого расширения, которое может или не может быть.
Примеры
iex> Path.basename("~/foo/bar.ex", ".ex")
"bar"
iex> Path.basename("~/foo/bar.exs", ".ex")
"bar.exs"
iex> Path.basename("~/foo/bar.old.ex", ".ex")
"bar.old" dirname(path)
Спецификации
dirname(t()) :: binary()
Возвращает компонент каталога path.
Примеры
iex> Path.dirname("/foo/bar.ex")
"/foo"
iex> Path.dirname("/foo/bar/baz.ex")
"/foo/bar"
iex> Path.dirname("/foo/bar/")
"/foo/bar"
iex> Path.dirname("bar.ex")
"." expand(path)
Спецификации
expand(t()) :: binary()
Преобразует путь в абсолютный и расширяет любые символы . и .. и ведущий ~.
Примеры
Path.expand("/foo/bar/../bar")
#=> "/foo/bar" expand(path, relative_to)
Спецификации
expand(t(), t()) :: binary()
Расширяет путь относительно пути, указанного во втором аргументе, расширяя любые символы . и ...
Если путь уже является абсолютным, relative_to игнорируется.
Обратите внимание, что эта функция рассматривает path с ведущим ~ как абсолютный.
Второй аргумент сначала расширяется до абсолютного пути.
Примеры
# Assuming that the absolute path to baz is /quux/baz
Path.expand("foo/bar/../bar", "baz")
#=> "/quux/baz/foo/bar"
Path.expand("foo/bar/../bar", "/baz")
#=> "/baz/foo/bar"
Path.expand("/foo/bar/../bar", "/baz")
#=> "/foo/bar" extname(path)
Спецификации
extname(t()) :: binary()
Возвращает расширение последней компоненты path.
Примеры
iex> Path.extname("foo.erl")
".erl"
iex> Path.extname("~/foo/bar")
"" join(list)
Спецификации
join([t(), ...]) :: binary()
Объединяет список путей.
Эта функция должна использоваться для преобразования списка путей в один путь. Обратите внимание, что любой конечный слэш удаляется при объединении.
Примеры
iex> Path.join(["~", "foo"]) "~/foo" iex> Path.join(["foo"]) "foo" iex> Path.join(["/", "foo", "bar/"]) "/foo/bar"
join(left, right)
Спецификации
join(t(), t()) :: binary()
Объединяет два пути.
Правый путь всегда будет преобразован в относительный формат, а любой конечный слэш будет удалён при объединении.
Примеры
iex> Path.join("foo", "bar")
"foo/bar"
iex> Path.join("/foo", "/bar/")
"/foo/bar"
Функции в этом модуле поддерживают chardata, поэтому передача списка будет рассматриваться как единый элемент:
iex> Path.join("foo", ["bar", "fiz"])
"foo/barfiz"
iex> Path.join(["foo", "bar"], "fiz")
"foobar/fiz" relative(name)
Спецификации
relative(t()) :: binary()
Принудительно делает путь относительным.
Примеры
Операционные системы семейства Unix
Path.relative("/usr/local/bin") #=> "usr/local/bin"
Path.relative("usr/local/bin") #=> "usr/local/bin"
Path.relative("../usr/local/bin") #=> "../usr/local/bin"
Windows
Path.relative("D:/usr/local/bin") #=> "usr/local/bin"
Path.relative("usr/local/bin") #=> "usr/local/bin"
Path.relative("D:bar.ex") #=> "bar.ex"
Path.relative("/bar/foo.ex") #=> "bar/foo.ex" relative_to(path, from)
Спецификации
relative_to(t(), t()) :: binary()
Возвращает данный path относительно заданного пути from.
Другими словами, эта функция пытается удалить префикс from из path.
Эта функция не обращается к файловой системе, поэтому она предполагает отсутствие символических ссылок между путями.
В случае, если прямой относительный путь не может быть найден, возвращается исходный путь.
Примеры
iex> Path.relative_to("/usr/local/foo", "/usr/local")
"foo"
iex> Path.relative_to("/usr/local/foo", "/")
"usr/local/foo"
iex> Path.relative_to("/usr/local/foo", "/etc")
"/usr/local/foo" relative_to_cwd(path)
Спецификации
relative_to_cwd(t()) :: binary()
Удобная функция для получения пути относительно текущей рабочей директории.
Если по какой-либо причине текущую рабочую директорию получить невозможно, эта функция возвращает заданный path.
rootname(path)
Спецификации
rootname(t()) :: binary()
Возвращает path с удалённым extension.
Примеры
iex> Path.rootname("/foo/bar")
"/foo/bar"
iex> Path.rootname("/foo/bar.ex")
"/foo/bar" rootname(path, extension)
Спецификации
rootname(t(), t()) :: binary()
Возвращает path с удалённым extension.
Эта функция должна использоваться для удаления определённого расширения, которое может или не может быть.
Примеры
iex> Path.rootname("/foo/bar.erl", ".erl")
"/foo/bar"
iex> Path.rootname("/foo/bar.erl", ".ex")
"/foo/bar.erl" split(path)
Спецификации
split(t()) :: [binary()]
Разделяет путь на список по разделителю пути.
Если пустая строка, возвращает пустой список.
В Windows путь разделяется как на "\" так и на "/" разделители, и буква диска, если она есть, всегда возвращается в нижнем регистре.
Примеры
iex> Path.split("")
[]
iex> Path.split("foo")
["foo"]
iex> Path.split("/foo/bar")
["/", "foo", "bar"] type(name)
Спецификации
type(t()) :: :absolute | :relative | :volumerelative
Возвращает тип пути.
Примеры
Операционные системы семейства Unix
Path.type("/") #=> :absolute
Path.type("/usr/local/bin") #=> :absolute
Path.type("usr/local/bin") #=> :relative
Path.type("../usr/local/bin") #=> :relative
Path.type("~/file") #=> :relative
Windows
Path.type("D:/usr/local/bin") #=> :absolute
Path.type("usr/local/bin") #=> :relative
Path.type("D:bar.ex") #=> :volumerelative
Path.type("/bar/foo.ex") #=> :volumerelative wildcard(glob, opts \\ [])
Характеристики
wildcard(t(), keyword()) :: [binary()]
Перебирает пути в соответствии с заданным glob выражением и возвращает список совпадений.
Маска похожа на обычный путь, за исключением того, что следующие "символы подстановки" интерпретируются особым образом:
?- соответствует одному символу.*- соответствует любому количеству символов до конца имени файла, следующей точки или следующей косой черты.**- два смежных*используются как один шаблон, и соответствуют всем файлам и нулю или более каталогам и подкаталогам.[char1,char2,...]- соответствует любому из перечисленных символов; два символа, разделенных дефисом, будут соответствовать диапазону символов. Не добавляйте пробелы до и после запятой, так как это приведет к сопоставлению путей, содержащих сам символ пробела.{item1,item2,...}- соответствует одному из альтернатив. Не добавляйте пробелы до и после запятой, так как это приведет к сопоставлению путей, содержащих сам символ пробела.
Другие символы представляют собой сами себя. Совпадут только пути, имеющие точно такой же символ в том же положении. Обратите внимание, что сопоставление регистрозависимое: "a" не будет соответствовать "A".
Разделители каталогов всегда должны быть записаны как /, даже в Windows. Вы можете вызвать Path.expand/1, чтобы нормализовать путь перед вызовом этой функции.
По умолчанию шаблоны * и ? не соответствуют файлам, начинающимся с точки .. См. опцию :match_dot в разделе "Параметры" ниже.
Параметры
-
:match_dot- (boolean) еслиfalse, специальные символы подстановки*и?не будут соответствовать файлам, начинающимся с точки (.). Еслиtrue, файлы, начинающиеся с.не будут обрабатываться специально. По умолчаниюfalse.
Примеры
Представьте, что у вас есть каталог под названием projects с тремя проектами Elixir внутри: elixir, ex_doc, и plug. Вы можете найти все .beam файлы внутри каталога ebin каждого проекта следующим образом:
Path.wildcard("projects/*/ebin/**/*.beam")
Если вы хотите найти файлы .beam и .app, вы можете сделать это так:
Path.wildcard("projects/*/ebin/**/*.{beam,app}")
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.10.4/Path.html