Файловая система
#
Base.Filesystem.cd
— Method
cd(f::Function, dir::AbstractString=homedir())
Временное изменение текущего рабочего каталога на dir
, применение функции f
и возврат в исходный каталог.
Примеры
julia> pwd()
"/home/JuliaUser"
julia> cd(readdir, "/home/JuliaUser/Projects/julia")
34-element Array{String,1}:
".circleci"
".freebsdci.sh"
".git"
".gitattributes"
".github"
⋮
"test"
"ui"
"usr"
"usr-staging"
julia> pwd()
"/home/JuliaUser"
#
Base.Filesystem.readdir
— Function
readdir(dir::AbstractString=pwd();
join::Bool = false,
sort::Bool = true,
) -> Vector{String}
Возвращает имена в каталоге dir
или текущем рабочем каталоге, если тот не указан. Если join
имеет значение false, readdir
возвращает только имена в каталоге в исходном виде; если join
имеет значение true, он возвращает joinpath(dir, name)
для каждого name
, поэтому возвращаемые строки являются полными путями. Чтобы снова получить абсолютные пути, вызовите readdir
с абсолютным путем к каталогу и join
, имеющим значение true.
По умолчанию readdir
сортирует список возвращаемых имен. Чтобы пропустить сортировку имен и получить их в том порядке, в котором они указаны в файловой системе, можно использовать readdir(dir, sort=false)
.
См. также описание walkdir
.
Совместимость: Julia 1.4
Для именованных аргументов |
Примеры
julia> cd("/home/JuliaUser/dev/julia")
julia> readdir()
30-element Array{String,1}:
".appveyor.yml"
".git"
".gitattributes"
⋮
"ui"
"usr"
"usr-staging"
julia> readdir(join=true)
30-element Array{String,1}:
"/home/JuliaUser/dev/julia/.appveyor.yml"
"/home/JuliaUser/dev/julia/.git"
"/home/JuliaUser/dev/julia/.gitattributes"
⋮
"/home/JuliaUser/dev/julia/ui"
"/home/JuliaUser/dev/julia/usr"
"/home/JuliaUser/dev/julia/usr-staging"
julia> readdir("base")
145-element Array{String,1}:
".gitignore"
"Base.jl"
"Enums.jl"
⋮
"version_git.sh"
"views.jl"
"weakkeydict.jl"
julia> readdir("base", join=true)
145-element Array{String,1}:
"base/.gitignore"
"base/Base.jl"
"base/Enums.jl"
⋮
"base/version_git.sh"
"base/views.jl"
"base/weakkeydict.jl"```
julia> readdir(abspath("base"), join=true)
145-element Array{String,1}:
"/home/JuliaUser/dev/julia/base/.gitignore"
"/home/JuliaUser/dev/julia/base/Base.jl"
"/home/JuliaUser/dev/julia/base/Enums.jl"
⋮
"/home/JuliaUser/dev/julia/base/version_git.sh"
"/home/JuliaUser/dev/julia/base/views.jl"
"/home/JuliaUser/dev/julia/base/weakkeydict.jl"
#
Base.Filesystem.walkdir
— Function
walkdir(dir; topdown=true, follow_symlinks=false, onerror=throw)
Возвращает итератор, который проходит по дереву каталогов. Итератор возвращает кортеж, содержащий (rootpath, dirs, files)
. По дереву каталогов можно проходить сверху вниз или снизу вверх. Если walkdir
или stat
обнаруживает IOError
, будет повторно выведена ошибка по умолчанию. Функцию обработки пользовательских ошибок можно предоставить с помощью именованного аргумента onerror
. onerror
вызывается с IOError
в качестве аргумента.
См. также описание readdir
.
Примеры
for (root, dirs, files) in walkdir(".")
println("Directories in $root")
for dir in dirs
println(joinpath(root, dir)) # путь к каталогам
end
println("Files in $root")
for file in files
println(joinpath(root, file)) # путь к файлам
end
end
julia> mkpath("my/test/dir");
julia> itr = walkdir("my");
julia> (root, dirs, files) = first(itr)
("my", ["test"], String[])
julia> (root, dirs, files) = first(itr)
("my/test", ["dir"], String[])
julia> (root, dirs, files) = first(itr)
("my/test/dir", String[], String[])
#
Base.Filesystem.mkdir
— Function
mkdir(path::AbstractString; mode::Unsigned = 0o777)
Создает каталог с именем path
и mode
разрешений. mode
по умолчанию имеет значение 0o777
, изменяемое текущей маской создания файла. Эта функция никогда не создает больше одного каталога. Если каталог уже существует или некоторые промежуточные каталоги не существуют, эта функция выводит ошибку. См. раздел о mkpath
со сведениями о функции, которая создает все необходимые промежуточные каталоги. Возвращает path
.
Примеры
julia> mkdir("testingdir")
"testingdir"
julia> cd("testingdir")
julia> pwd()
"/home/JuliaUser/testingdir"
#
Base.Filesystem.mkpath
— Function
mkpath(path::AbstractString; mode::Unsigned = 0o777)
Создает все промежуточные каталоги в path
по мере необходимости. Каталоги создаются с разрешениями mode
, имеющим по умолчанию значение 0o777
и изменяемым текущей маской создания файла. В отличие от mkdir
, mkpath
не выдает ошибку, если path
(или его части) уже существует. Однако ошибка выдается, если path
(или его части) указывает на существующий файл. Возвращает path
.
Если path
содержит имя файла, вы, вероятно, захотите использовать mkpath(dirname(path))
, чтобы не создавать каталог с использованием имени файла.
Примеры
julia> cd(mktempdir())
julia> mkpath("my/test/dir") # создает три каталога
"my/test/dir"
julia> readdir()
1-element Array{String,1}:
"my"
julia> cd("my")
julia> readdir()
1-element Array{String,1}:
"test"
julia> readdir("test")
1-element Array{String,1}:
"dir"
julia> mkpath("intermediate_dir/actually_a_directory.txt") # создает два каталога
"intermediate_dir/actually_a_directory.txt"
julia> isdir("intermediate_dir/actually_a_directory.txt")
true
#
Base.Filesystem.symlink
— Function
symlink(target::AbstractString, link::AbstractString; dir_target = false)
Создает символьную ссылку на target
с именем link
.
В Windows символьные ссылки должны быть явным образом объявлены как указывающие на каталог или нет. Если target
уже существует, по умолчанию тип link
будет обнаруживаться автоматически, однако если target
не существует, эта функция по умолчанию будет создавать символьную ссылку на файл, пока dir_target
не будет задано значение true
. Обратите внимание, что если пользователь задает dir_target
, но target
существует и является файлом, символьная ссылка на каталог будет по-прежнему создаваться, но разыменование символьной ссылки будет завершаться ошибкой, так же, как если бы пользователь создавал символьную ссылку на файл (путем вызова symlink()
с dir_target
, имеющим значение false
до создания каталога), и пытался разыменовать ее для каталога.
Кроме того, в Windows существует два способа создания ссылки: символьной ссылки и точки соединения. Точки соединения немного более эффективны, но не поддерживают относительные пути, поэтому если запрашивается символьная ссылка относительного каталога (как указано с помощью isabspath(target)
, возвращающего false
), будет использоваться символьная ссылка, в противном случае будет использоваться точка соединения. Создавать символьные ссылки в Windows рекомендуется только после создания файлов или каталогов, на которые они указывают.
См. также описание hardlink
.
Эта функция вызывает ошибку в операционных системах, таких как Windows XP, которые не поддерживают мягкие символьные ссылки. |
Совместимость: Julia 1.6
Именованный аргумент |
#
Base.Filesystem.readlink
— Function
readlink(path::AbstractString) -> AbstractString
Возвращает целевое расположение, на которое указывает символьная ссылка path
.
#
Base.Filesystem.chmod
— Function
chmod(path::AbstractString, mode::Integer; recursive::Bool=false)
Изменяет режим разрешений path
на mode
. На данный момент поддерживаются только целочисленные mode
(например, 0o777
). Если recursive=true
и путь являются каталогом, все разрешения в этом каталоге будут рекурсивно изменены. Возвращает path
.
До Julia 1.6 было невозможно корректно работать с ACL файловой системы в Windows, поэтому в файлах задавались биты только для чтения. Теперь появилась возможность управлять списками ACL. |
#
Base.Filesystem.chown
— Function
chown(path::AbstractString, owner::Integer, group::Integer=-1)
Изменяет владельца и (или) группы path
на owner
и (или) group
. Если для owner
или group
введено значение -1
, соответствующий идентификатор не изменится. На данный момент поддерживаются только целочисленные owner
и group
. Возвращает path
.
#
Base.Libc.RawFD
— Type
RawFD
Примитивный тип, который заключает в оболочку дескриптор файла собственной ОС. RawFD
можно передавать методам, таким как stat
, для обнаружения информации о базовом файле, а также можно использовать для открытия потоков с RawFD
, описывающим файл ОС, поддерживающий поток.
#
Base.stat
— Function
stat(file)
Возвращает структуру, поля которой содержат информацию о файле. Поля структуры приведены ниже.
Имя | Описание |
---|---|
desc |
Путь или дескриптор файла ОС |
size |
Размер (в байтах) файла |
device |
Идентификатор устройства, содержащего файл |
inode |
Номер индексного дескриптора файла |
mode |
Режим защиты файла |
nlink |
Число жестких ссылок на файл |
uid |
Идентификатор пользователя-владельца файла |
gid |
Идентификатор группы владельца файла |
rdev |
Если этот файл ссылается на устройство, идентификатор устройства, на которое он ссылается |
blksize |
Предпочтительный размер блока файловой системы для файла |
blocks |
Число таких выделенных блоков |
mtime |
Метка времени Unix, указывающая время последнего изменения файла |
ctime |
Метка времени Unix, указывающая время изменения метаданных файла |
#
Base.Filesystem.diskstat
— Function
diskstat(path=pwd())
Возвращает статистику в байтах о диске, содержащем файл или каталог, на который указывает path
. Если аргументы не переданы, возвращается статистика о диске, содержащем текущий рабочий каталог.
Совместимость: Julia 1.8
Этот метод был добавлен в Julia 1.8. |
#
Base.Filesystem.cp
— Function
cp(src::AbstractString, dst::AbstractString; force::Bool=false, follow_symlinks::Bool=false)
Копирует файл, ссылку или каталог из src
в dst
. force=true
сначала удалит существующий dst
.
Если follow_symlinks=false
и src
является символьной ссылкой, dst
будет создан в виде символьной ссылки. Если follow_symlinks=true
и src
является символьной ссылкой, dst
будет копией файла или каталога, на который указывает src
. Возвращает dst
.
Функция |
#
Base.download
— Function
download(url::AbstractString, [path::AbstractString = tempname()]) -> path
Скачивает файл с заданного URL-адреса, сохраняет его в path
расположения или, если не указано, по временному пути. Возвращает путь скачанного файла.
Начиная с Julia 1.6, эта функция считается устаревшей и является лишь тонкой оболочкой |
#
Base.Filesystem.mv
— Function
mv(src::AbstractString, dst::AbstractString; force::Bool=false)
Перемещает файл, ссылку или каталог из src
в dst
. force=true
сначала удалит существующий dst
. Возвращает dst
.
Примеры
julia> write("hello.txt", "world");
julia> mv("hello.txt", "goodbye.txt")
"goodbye.txt"
julia> "hello.txt" in readdir()
false
julia> readline("goodbye.txt")
"world"
julia> write("hello.txt", "world2");
julia> mv("hello.txt", "goodbye.txt")
ERROR: ArgumentError: 'goodbye.txt' exists. `force=true` is required to remove 'goodbye.txt' before moving.
Stacktrace:
[1] #checkfor_mv_cp_cptree#10(::Bool, ::Function, ::String, ::String, ::String) at ./file.jl:293
[...]
julia> mv("hello.txt", "goodbye.txt", force=true)
"goodbye.txt"
julia> rm("goodbye.txt");
#
Base.Filesystem.rm
— Function
rm(path::AbstractString; force::Bool=false, recursive::Bool=false)
Удаляет файл, ссылку или пустой каталог по заданному пути. Если передается force=true
, несуществующий путь не считается ошибкой. Если передается recursive=true
, и путь является каталогом, все содержимое рекурсивно удаляется.
Примеры
julia> mkpath("my/test/dir");
julia> rm("my", recursive=true)
julia> rm("this_file_does_not_exist", force=true)
julia> rm("this_file_does_not_exist")
ERROR: IOError: unlink("this_file_does_not_exist"): no such file or directory (ENOENT)
Stacktrace:
[...]
#
Base.Filesystem.touch
— Function
Base.touch(::Pidfile.LockMonitor)
Обновляет mtime
для блокировки, чтобы указать ее актуальное состояние.
См. также описание ключевого слова refresh
в конструкторе mkpidlock
.
touch(path::AbstractString) touch(fd::File)
Обновляет метку времени последнего изменения в файле в соответствии с текущим временем.
Если файл не существует, создается новый файл.
Возвращает path
.
Примеры
julia> write("my_little_file", 2);
julia> mtime("my_little_file")
1.5273815391135583e9
julia> touch("my_little_file");
julia> mtime("my_little_file")
1.527381559163435e9
Мы видим, что mtime
изменен функцией touch
.
#
Base.Filesystem.tempname
— Function
tempname(parent=tempdir(); cleanup=true) -> String
Создает путь к временному файлу. Эта функция возвращает только путь, файл не создается. Путь, скорее всего, будет уникальным, но это не гарантируется из-за очень низкой вероятности того, что два одновременных вызова tempname
создадут одно и то же имя файла. Имя гарантированно отличается от имен всех файлов, уже существующих на момент вызова tempname
.
При вызове без аргументов временное имя будет абсолютным путем к временному имени в системном временном каталоге, заданному tempdir()
. Если задан аргумент каталога parent
, временный путь будет находиться в этом каталоге.
Параметр cleanup
управляет тем, пытается ли процесс автоматически удалить возвращаемый путь при завершении. Обратите внимание, что функция tempname
не создает никакого файла или каталога в возвращаемом расположении, поэтому очистка выполняется только после того, как там будет создан файл ли каталог. Если вы это сделаете, и параметр clean
имеет значение true
, то путь будет удален по завершении процесса.
Совместимость: Julia 1.4
Аргументы |
В системе безопасности могут возникнуть бреши, если другой процесс получит то же самое имя файла и создаст файл до того, как это сделаете вы. Если такая ситуация вызывает беспокойство, откройте файл с помощью |
#
Base.Filesystem.tempdir
— Function
tempdir()
Получает путь временного каталога. В Windows tempdir()
использует первую переменную среды, найденную в упорядоченном списке TMP
, TEMP
, USERPROFILE
. Во всех других операционных системах tempdir()
использует первую переменную среды, найденную в упорядоченном списке TMPDIR
, TMP
, TEMP
и TEMPDIR
. Если ничего не найдено, используется путь "/tmp"
.
#
Base.Filesystem.mktemp
— Method
mktemp(parent=tempdir(); cleanup=true) -> (path, io)
Возвращает (path, io)
, где path
является путем нового временного файла в parent
, а io
является объектом открытого файла для этого пути. Параметр cleanup
управляет автоматическим удалением временного файла по завершении процесса.
Совместимость: Julia 1.3
Именованный аргумент |
#
Base.Filesystem.mktemp
— Method
mktemp(f::Function, parent=tempdir())
Применяет функцию f
к результату mktemp(parent)
и удаляет временный файл по завершении.
См. также описание mktempdir
.
#
Base.Filesystem.mktempdir
— Method
mktempdir(parent=tempdir(); prefix="jl_", cleanup=true) -> path
Создает временный каталог в каталоге parent
с именем, сформированным на основе заданного префикса и случайного суффикса, и возвращает путь к нему. Кроме того, любые конечные символы X
могут быть заменены случайными символами. Если parent
не существует, возникает ошибка. Параметр cleanup
управляет автоматическим удалением временного файла по завершении процесса.
Совместимость: Julia 1.2
Именованный аргумент |
Совместимость: Julia 1.3
Именованный аргумент |
#
Base.Filesystem.mktempdir
— Method
mktempdir(f::Function, parent=tempdir(); prefix="jl_")
Применяет функцию f
к результату mktempdir(parent; prefix)
и удаляет временный каталог и все его содержимое по завершении.
Совместимость: Julia 1.2
Именованный аргумент |
#
Base.Filesystem.isblockdev
— Function
isblockdev(path) -> Bool
Возвращает true
, если path
является блочным устройством, в противном случае возвращает false
.
#
Base.Filesystem.ischardev
— Function
ischardev(path) -> Bool
Возвращает true
, если path
является символьным устройством, в противном случае возвращает false
.
#
Base.Filesystem.isfifo
— Function
isfifo(path) -> Bool
Возвращает true
, если path
является FIFO, в противном случае возвращает false
.
#
Base.Filesystem.isfile
— Function
isfile(path) -> Bool
Возвращает true
, если path
является обычным файлом, в противном случае возвращает false
.
Примеры
julia> isfile(homedir())
false
julia> filename = "test_file.txt";
julia> write(filename, "Hello world!");
julia> isfile(filename)
true
julia> rm(filename);
julia> isfile(filename)
false
#
Base.Filesystem.islink
— Function
islink(path) -> Bool
Возвращает true
, если path
является символьной ссылкой, в противном случае возвращает false
.
#
Base.Filesystem.ismount
— Function
ismount(path) -> Bool
Возвращает true
, если path
является точкой подключения, в противном случае возвращает false
.
#
Base.Filesystem.issetgid
— Function
issetgid(path) -> Bool
Возвращает true
, если для path
установлен флаг setgid, в противном случае возвращает false
.
#
Base.Filesystem.issetuid
— Function
issetuid(path) -> Bool
Возвращает true
, если для path
установлен флаг setuid, в противном случае возвращает false
.
#
Base.Filesystem.issocket
— Function
issocket(path) -> Bool
Возвращает true
, если path
является сокетом, в противном случае возвращается false
.
#
Base.Filesystem.issticky
— Function
issticky(path) -> Bool
Возвращает true
, если для path
задан бит закрепления, в противном случае возвращает false
.
#
Base.Filesystem.homedir
— Function
homedir() -> String
Возвращает домашний каталог текущего пользователя.
|
#
Base.Filesystem.basename
— Function
basename(path::AbstractString) -> AbstractString
Получение части имени файла в пути.
Эта функция немного отличается от программы Unix |
Примеры
julia> basename("/home/myuser/example.jl")
"example.jl"
julia> basename("/home/myuser/")
""
См. также описание dirname
.
#
Base.Filesystem.isabspath
— Function
isabspath(path::AbstractString) -> Bool
Определение того, является ли путь абсолютным (начинается с корневого каталога).
Примеры
julia> isabspath("/home")
true
julia> isabspath("home")
false
#
Base.Filesystem.isdirpath
— Function
isdirpath(path::AbstractString) -> Bool
Определение того, относится ли путь к каталогу (например, заканчивается разделителем пути).
Примеры
julia> isdirpath("/home")
false
julia> isdirpath("/home/")
true
#
Base.Filesystem.joinpath
— Function
joinpath(parts::AbstractString...) -> String
joinpath(parts::Vector{AbstractString}) -> String
joinpath(parts::Tuple{AbstractString}) -> String
Объединяет компоненты пути в полный путь. Если какой-либо аргумент является абсолютным путем или (в Windows) имеет спецификацию диска, которая не совпадает с диском, определенным для объединения предыдущих путей, предыдущие компоненты отбрасываются.
Обратите внимание, что в Windows для каждого диска существует текущий каталог, joinpath("c:", "foo")
, который представляет путь относительно текущего каталога на диске c:, поэтому он имеет вид c:foo, а не c:\foo. Более того, joinpath
рассматривает его как неабсолютный путь и игнорирует регистр буквы диска, поэтому joinpath("C:\A","c:b") = "C:\A\b"
.
Примеры
julia> joinpath("/home/myuser", "example.jl")
"/home/myuser/example.jl"
julia> joinpath(["/home/myuser", "example.jl"])
"/home/myuser/example.jl"
#
Base.Filesystem.abspath
— Function
abspath(path::AbstractString) -> String
Преобразует путь в абсолютный путь с добавлением при необходимости текущего каталога. Также нормализует путь как в normpath
.
Пример
Если вы находитесь в каталоге JuliaExample
, а данные, которые вы используете, находятся на два уровня выше относительно каталога JuliaExample
, вы можете написать:
abspath("../../data")
Результатом будет путь вида "/home/JuliaUser/data/"
.
См. также описание функций joinpath
, pwd
и expanduser
.
abspath(path::AbstractString, paths::AbstractString...) -> String
Преобразует набор путей в нормализованный путь с их объединением и добавлением при необходимости текущего каталога. Эквивалентно abspath(joinpath(path, paths...))
.
#
Base.Filesystem.normpath
— Function
normpath(path::AbstractString) -> String
Нормализует путь с удалением записей "." и ".." и изменением "/" на канонический разделитель пути для системы.
Примеры
julia> normpath("/home/myuser/../example.jl")
"/home/example.jl"
julia> normpath("Documents/Julia") == joinpath("Documents", "Julia")
true
normpath(path::AbstractString, paths::AbstractString...) -> String
Преобразует набор путей в нормализованный путь с их объединением и удалением записей "." и "..". Эквивалентно normpath(joinpath(path, paths...))
.
#
Base.Filesystem.realpath
— Function
realpath(path::AbstractString) -> String
Канонизирует путь с расширением символьных ссылок и удалением записей "." и "..". В файловых системах с сохранением регистра и не учитывающих регистр (обычно в Mac и Windows) возвращается регистр, сохраненный в файловой системе, для пути.
(Эта функция вызывает исключение, если path
не существует в файловой системе.)
#
Base.Filesystem.relpath
— Function
relpath(path::AbstractString, startpath::AbstractString = ".") -> AbstractString
Возвращает относительный путь к файлу для path
либо из текущего каталога, либо из необязательного начального каталога. Это вычисление пути: к файловой системе нет обращений для подтверждения существования или характера path
или startpath
.
В Windows регистр учитывается для всех частей пути, кроме букв дисков. Если path
и startpath
относятся к разным дискам, возвращается абсолютный путь path
.
#
Base.Filesystem.expanduser
— Function
expanduser(path::AbstractString) -> AbstractString
В системах Unix заменяет символ тильды в начале пути домашним каталогом текущего пользователя.
См. также описание contractuser
.
#
Base.Filesystem.contractuser
— Function
contractuser(path::AbstractString) -> AbstractString
Если в системах Unix путь начинается с homedir()
, замените его символом тильды.
См. также описание expanduser
.
#
Base.Filesystem.samefile
— Function
samefile(path_a::AbstractString, path_b::AbstractString)
Проверяет, ссылаются ли пути path_a
и path_b
на один и тот же существующий файл или каталог.
#
Base.Filesystem.splitdir
— Function
splitdir(path::AbstractString) -> (AbstractString, AbstractString)
Разделяет путь на кортеж из имени каталога и имени файла.
Примеры
julia> splitdir("/home/myuser")
("/home", "myuser")
#
Base.Filesystem.splitdrive
— Function
splitdrive(path::AbstractString) -> (AbstractString, AbstractString)
В Windows делит путь на часть с буквой диска и часть с путем. В системах Unix первым компонентом всегда является пустая строка.
#
Base.Filesystem.splitext
— Function
splitext(path::AbstractString) -> (AbstractString, AbstractString)
Если последний компонент пути содержит одну или несколько точек, путь делится на все, что находится перед последней точкой, и все, включая точку, и что находится после нее. В противном случае возвращается кортеж из неизмененного аргумента и пустой строки. splitext — это краткое название расширения разделения.
Примеры
julia> splitext("/home/myuser/example.jl")
("/home/myuser/example", ".jl")
julia> splitext("/home/myuser/example.tar.gz")
("/home/myuser/example.tar", ".gz")
julia> splitext("/home/my.user/example")
("/home/my.user/example", "")
#
Base.Filesystem.splitpath
— Function
splitpath(path::AbstractString) -> Vector{String}
Разделяет путь к файлу на все компоненты пути. Противоположно joinpath
. Возвращает массив подстрок, по одной для каждого каталога или файла в пути, включая корневой каталог (при наличии).
Совместимость: Julia 1.1
Для этой функции требуется версия Julia не ниже 1.1. |
Примеры
julia> splitpath("/home/myuser/example.jl")
4-element Vector{String}:
"/"
"home"
"myuser"
"example.jl"