Spec-Zone.ru › Elixir 1.10

Путь

Этот модуль предоставляет удобные функции для работы с или получения путей к файлам в файловой системе.

Функции в этом модуле могут принимать в качестве аргумента данные символов (т.е. строку или список символов/строку) и всегда возвращают строку (кодированную в UTF-8).

Большинство функций в этом модуле не взаимодействуют с файловой системой, за исключением нескольких функций, которые требуют этого (например, wildcard/2 и expand/1).

Обзор

Типы

t()

Функции

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()
END_OF_DOCUMENT_MARKER

Функции

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
END_OF_DOCUMENT_MARKER

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API