Путь
Этот модуль предоставляет удобные средства для манипулирования или получения путей к файлам в файловой системе.
Функции в этом модуле могут получать в качестве аргумента данные символьной строки (т.е. строку или список символов/строку) и всегда возвращают строку (кодированную в UTF-8).
Большинство функций в этом модуле не взаимодействуют с файловой системой, за исключением нескольких функций, которые требуют этого (например, wildcard/2 и expand/1).
Краткое описание
Типы
- t()
Функции
- absname(path)
-
Преобразует указанный путь в абсолютный. В отличие от
expand/1, не предпринимается попытка разрешить..,.или~ - absname(path, relative_to)
-
Строит путь от
relative_toкpath. Еслиpathуже является абсолютным путем,relative_toигнорируется. См. такжеrelative_to/2 - basename(path)
-
Возвращает последнюю часть пути или сам путь, если он не содержит разделителей каталогов.
- basename(path, extension)
-
Возвращает последнюю часть
pathсоextensionудалённой. Эта функция должна использоваться для удаления определённого расширения, которое может или может не присутствовать. - dirname(path)
-
Возвращает компонент каталога
path - expand(path)
-
Преобразует путь в абсолютный и расширяет символы
.и..и ведущий~. - expand(path, relative_to)
-
Расширяет путь относительно пути, заданного в качестве второго аргумента, расширяя символы
.и... Если путь уже является абсолютным,relative_toигнорируется. - extname(path)
-
Возвращает расширение последней части
path - join(list)
-
Объединяет список строк.
- join(left, right)
-
Объединяет два пути.
- relative(name)
-
Принудительно задаёт путь как относительный.
- relative_to(path, from)
-
Возвращает указанный
pathотносительно указанногоfromпути. Другими словами, пытается удалить префиксfromизpath - relative_to_cwd(path)
-
Удобная функция для получения пути относительно текущей рабочей директории. Если по какой-то причине текущую рабочую директорию получить нельзя, возвращает полный путь.
- rootname(path)
-
Возвращает
pathс удалённымextension. - rootname(path, extension)
-
Возвращает
pathс удалённымextension. Эта функция должна использоваться для удаления определённого расширения, которое может или может не присутствовать. - split(path)
-
Разделяет путь на список по разделителю пути.
- type(name)
-
Возвращает тип пути.
- wildcard(glob, opts \\ [])
-
Обходит пути в соответствии с заданным выражением
globи возвращает список совпадений.
Типы
t()
t() :: :unicode.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" 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" 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
Удобная функция для получения пути относительно текущей рабочей директории. Если по какой-то причине текущую рабочую директорию получить нельзя, возвращает полный путь.
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.t) :: [binary]
Перебирает пути в соответствии с заданным glob выражением и возвращает список совпадений.
Шаблон похож на обычный путь, за исключением того, что некоторые «символы подстановки» интерпретируются особым образом. Следующие символы являются специальными:
-
?- соответствует одному символу -
*- соответствует любому количеству символов до конца имени файла, следующей точки или следующего слэша -
**- два последовательных*в качестве одного шаблона будут соответствовать всем файлам и нулю или более каталогам и подкаталогам -
[char1,char2,...]- соответствует любому из перечисленных символов; два символа, разделенные дефисом, соответствуют диапазону символов. Не добавляйте пробелы до и после запятой, так как в противном случае она будет соответствовать путям, содержащим сам символ пробела. -
{item1,item2,...}- соответствует одному из вариантов. Не добавляйте пробелы до и после запятой, так как в противном случае она будет соответствовать путям, содержащим сам символ пробела.
Другие символы представляют сами себя. Соответствие происходит только в том случае, если пути имеют точно такие же символы в тех же позициях. Обратите внимание, что соответствие чувствительно к регистру; т.е. «a» не будет соответствовать «A».
По умолчанию шаблоны * и ? не соответствуют файлам, начинающимся с точки . , если match_dot: true не указано в opts.
Примеры
Представьте, что у вас есть каталог под названием projects с тремя проектами Elixir внутри: elixir, ex_doc и dynamo. Вы можете найти все .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.3.4/Path.html