I want to compress some files in R
using tar()
. My code is quite simple:
f <- "C:/TEMP/tarfile.tar.gz"
files_to_compress <- dir(path=tempdir(), full.names = TRUE)
tar(tarfile = f, files = files_to_compress, compression = "gzip")
The compression works, I get the file tarfile.tar.gz but in the compressed file I get the structure of tempdir(), too.
The file tarfile.tar.gz contains for instance (-> indicating a new folder layer):
C: -> Users -> MyUserName -> AppData -> Local -> Temp -> RTmpM5Dxmp -> files_to_compress
How can I compress files_to_compress
without archiving the structure of the directories, too?
setwd
to tempdir()
to have this as a starting point for folders.
A solution without changing the working directory is possible by using archive::archive_write_dir
(what has the lines old <- setwd(dir)
and on.exit(setwd(old))
).
f <- "C:/TEMP/tarfile.tar.gz"
td <- tempdir() # Create a tempdir
. <- setwd(td) # Save current working directory
cat("x", file="x.txt") # Create there a file
dir.create("sub") # Create a subfolder in tempdir
cat("y", file="./sub/y.txt") # and create there a file
tar(tarfile = f, compression = "gzip") # default is to archive all files under the current directory
## Alternatives to the line above:
#files_to_compress <- dir(recursive = TRUE) # Either this where full.names=TRUE would just add ./ what is the curent folder
#files_to_compress <- dir(path=getwd(), full.names = FALSE, recursive = TRUE) # or that with a given path
#
#tar(tarfile = f, files = files_to_compress, compression = "gzip") # and create tar
setwd(.) # Change back to original path
archive::archive_write_dir(f, td) # Create tar using package archive