Attempt first to make a hardlink. If that fails, try to make a symlink (on non-windows systems and symlink = TRUE). If that fails, copy the file.

linkOrCopy(from, to, symlink = TRUE)

Arguments

from, to

Character vectors, containing file names or paths. to can alternatively be the path to a single existing directory.

symlink

Logical indicating whether to use symlink (instead of hardlink). Default FALSE.

Note

Use caution with files-backed objects (e.g., rasters). See examples.

See also

file.link, file.symlink, file.copy.

Examples

library(datasets) library(magrittr)
#> #> Attaching package: ‘magrittr’
#> The following object is masked from ‘package:raster’: #> #> extract
#> The following objects are masked from ‘package:reproducible’: #> #> %>%, extract
#> The following objects are masked from ‘package:testthat’: #> #> equals, is_less_than, not
library(raster) tmpDir <- file.path(tempdir(), "symlink-test") %>% normalizePath(winslash = '/', mustWork = FALSE) dir.create(tmpDir) f0 <- file.path(tmpDir, "file0.csv") write.csv(iris, f0) d1 <- file.path(tmpDir, "dir1") dir.create(d1) write.csv(iris, file.path(d1, "file1.csv")) d2 <- file.path(tmpDir, "dir2") dir.create(d2) f2 <- file.path(tmpDir, "file2.csv") ## create link to a file linkOrCopy(f0, f2)
#> Hardlinked version of file created at: /tmp/RtmpqKjqWd/symlink-test/file2.csv, which points to /tmp/RtmpqKjqWd/symlink-test/file0.csv; no copy was made.
#> [1] TRUE
file.exists(f2) ## TRUE
#> [1] TRUE
identical(read.table(f0), read.table(f2)) ## TRUE
#> [1] TRUE
## deleting the link shouldn't delete the original file unlink(f0) file.exists(f0) ## FALSE
#> [1] FALSE
file.exists(f2) ## TRUE
#> [1] TRUE
## using rasters and other file-backed objects f3a <- system.file("external/test.grd", package = "raster") f3b <- system.file("external/test.gri", package = "raster") r3a <- raster(f3a) f4a <- file.path(tmpDir, "raster4.grd") f4b <- file.path(tmpDir, "raster4.gri") linkOrCopy(f3a, f4a) ## hardlink
#> Hardlinked version of file created at: /tmp/RtmpqKjqWd/symlink-test/raster4.grd, which points to /usr/local/lib/R/site-library/raster/external/test.grd; no copy was made.
#> [1] TRUE
linkOrCopy(f3b, f4b) ## hardlink
#> Hardlinked version of file created at: /tmp/RtmpqKjqWd/symlink-test/raster4.gri, which points to /usr/local/lib/R/site-library/raster/external/test.gri; no copy was made.
#> [1] TRUE
r4a <- raster(f4a) isTRUE(all.equal(r3a, r4a)) # TRUE
#> [1] TRUE
## cleanup unlink(tmpDir, recursive = TRUE)