R: Manipulation of Directories and File Permissions

files2 {base} | R Documentation

## Manipulation of Directories and File Permissions

### Description

These functions provide a low-level interface to the computer's file system.

### Usage

    dir.exists(paths)
    dir.create(path, showWarnings = TRUE, recursive = FALSE, mode = "0777")
    Sys.chmod(paths, mode = "0777", use_umask = TRUE)
    Sys.umask(mode = NA)

### Arguments

`path` | a character vector containing a single path name. Tilde expansion (see `path.expand`) is done.
`paths` | character vectors containing file or directory paths. Tilde expansion (see `path.expand`) is done.
`showWarnings` | logical; should the warnings on failure be shown?
`recursive` | logical. Should elements of the path other than the last be created? If true, like the Unix command `mkdir -p`.
`mode` | the mode to be used on Unix-alikes: it will be coerced by `as.octmode`. For `Sys.chmod` it is recycled along `paths`.
`use_umask` | logical: should the mode be restricted by the `umask` setting?

### Details

`dir.create` creates the last element of the path, unless `recursive = TRUE`. Trailing path separators are discarded. On Windows drives are allowed in the path specification and unless the path is rooted, it will be interpreted relative to the current directory on that drive. `mode` is ignored on Windows.

One of the idiosyncrasies of Windows is that directory creation may report success but create a directory with a different name, for example `dir.create("G.S.")` creates ‘"G.S"’. This is undocumented, and what are the precise circumstances is unknown (and might depend on the version of Windows). Also avoid directory names with a trailing space.

`Sys.chmod` sets the file permissions of one or more files. The interpretation of `mode` in the Windows system functions is non-POSIX and only supports setting the read-only attribute of the file. So R interprets `mode` to mean set read-only if and only if `(mode & 0200) == 0` (interpreted in octal). Windows has a much more extensive system of file permissions on some file systems (e.g., versions of NTFS) which are unrelated to this system call.

`Sys.umask` sets the `umask` and returns the previous value: as a special case `mode = NA` just returns the current value. All files on Windows are regarded as readable, and files being executable is not a Windows concept. So `umask` only controls whether a file is writable: a setting of `"200"` makes files (but not directories) created subsequently read-only.

How modes are handled depends on the file system, even on Unix-alikes (although their documentation is often written assuming a POSIX file system). So treat documentation cautiously if you are using, say, a FAT/FAT32 or network-mounted file system.

### Value

`dir.exists` returns a logical vector of `TRUE` or `FALSE` values (without names).

`dir.create` and `Sys.chmod` return invisibly a logical vector indicating if the operation succeeded for each of the files attempted. Using a missing value for a path name will always be regarded as a failure. `dir.create` indicates failure if the directory already exists. If `showWarnings = TRUE`, `dir.create` will give a warning for an unexpected failure (e.g., not for a missing value nor for an already existing component for `recursive = TRUE`).

`Sys.umask` returns the previous value of the `umask`, as a length-one object of class `"octmode"`: the visibility flag is off unless `mode` is `NA`.

See also the section in the help for `file.exists` on case-insensitive file systems for the interpretation of `path` and `paths`.

### Note

There is no guarantee that these functions will handle Windows relative paths of the form ‘d:path’: try ‘d:./path’ instead. In particular, ‘d:’ is not recognized as a directory. Nor are \\?\ prefixes (and similar) supported.

UTF-8-encoded dirnames not valid in the current locale can be used.

### Author(s)

Ross Ihaka, Brian Ripley

### See Also

`file.info`, `file.exists`, `file.path`, `list.files`, `unlink`, `basename`, `path.expand`.

### Examples

    ## Not run:
    ## Fix up maximal allowed permissions in a file tree
    Sys.chmod(list.dirs("."), "777")
    f <- list.files(".", all.files = TRUE, full.names = TRUE, recursive = TRUE)
    Sys.chmod(f, (file.info(f)$mode | "664"))

    ## End(Not run)

[Package base version 3.5.1 Index]