删除tmp文件

Dou*_*Fir 7 r temporary-files

我读了这篇关于如何删除tmp文件的帖子.该帖子的解决方案是:

do.call(file.remove, list(list.files("C:/Temp", full.names = TRUE)))
Run Code Online (Sandbox Code Playgroud)

对于Windows机器,目录"C:/ Temp"可能很好.因为我在linux上,我不确定我的tmp文件目录是什么,所以我这样做:

tmp <- tempfile()
Run Code Online (Sandbox Code Playgroud)

返回:"/ tmp/RtmpNS80no/file147c37e54e8e"

所以,我试过这个:

do.call(file.remove, list(list.files("tmp", full.names = TRUE)))
Run Code Online (Sandbox Code Playgroud)

这返回"逻辑(0)"所以可能不起作用?

如何删除所有tmp文件?

cde*_*erv 14


您可以获取当前R会话的临时目录.多次调用时它不会改变

tmp_dir <- tempdir()
tmp_dir
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh"
tempdir()
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh"
Run Code Online (Sandbox Code Playgroud)

临时目录包含当前R会话的临时文件和目录

list.files(tmp_dir)
#> [1] "file16dc20539ab"  "file16dc4ad71f"   "file16dc5bab1716"
#> [4] "file16dc74d65663"
Run Code Online (Sandbox Code Playgroud)

会话临时目录位于系统的临时目录中.如果要删除系统临时目录中的所有内容,可以使用此路径(不推荐使用此路径,因为它适用于所有系统,而不仅仅是R临时文件)

dirname(tmp_dir)
#> [1] "C:/Users/chris/AppData/Local/Temp"
Run Code Online (Sandbox Code Playgroud)

该路径还包含在OS的环境变量中.(显然,我在Windows上)

Sys.getenv("TEMP")
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp"
shell("echo %TMP%", intern = T) # command line from R on windows
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp"
Run Code Online (Sandbox Code Playgroud)

tempfile()tempdir()默认情况下,在目录中给出可能的临时文件的路径 ,没有文件扩展名.tempfile多次调用时,不会创建文件并提供不同的值

tmp_file <- tempfile()
tmp_file
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh\\file16dc202636f"
file.exists(tmp_file)
#> [1] FALSE

tempfile() # new file path when called again
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh\\file16dc72594e58"
Run Code Online (Sandbox Code Playgroud)

我们可以写一些东西到tmp_file.

# file is created by writeLines if it does not exist (this is the case here)
writeLines("This is a temp file", con = tmp_file)
file.exists(tmp_file)
#> [1] TRUE
Run Code Online (Sandbox Code Playgroud)

我们可以从这个文件中读取

readLines(tmp_file)
#> [1] "This is a temp file"
Run Code Online (Sandbox Code Playgroud)

现在,如果要删除此文件

file.remove(tmp_file)
#> [1] TRUE
file.exists(tmp_file)
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)

如果要删除R session temp文件夹中的所有文件,可以file.remove在文件列表中使用 .为了这个示例目的,我删除了以"file"开头的所有临时文件("^file"是该模式的正则表达式).还有我创建的内容--R会话似乎在创建一些临时文件.

files <- list.files(tmp_dir, full.names = T, pattern = "^file")
files
#>  [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc1a6a6e15"
#>  [2] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc1ff572fc"
#>  [3] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc20539ab" 
#>  [4] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc2e2227b8"
#>  [5] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc4ad71f"  
#>  [6] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc513c35b6"
#>  [7] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc570a473f"
#>  [8] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc5bab1716"
#>  [9] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc6e102bd4"
#> [10] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc6f253f90"
#> [11] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/file16dc74d65663"
file.remove(files)
#> Warning in file.remove(files): impossible d'effacer le fichier 'C:
#> \Users\chris\AppData\Local\Temp\RtmpmusYkh/file16dc1ff572fc', à cause de
#> 'Permission denied'
#>  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

我得到一个警告,因为有一个我无法删除的文件(现在可能正由R使用)

如果你想删除您可以使用一个文件夹unlink

# create a new directory under tempdir
dir.create(dir1 <- file.path(tempdir(), "testdir"))
# create 2 file under this new directory
file.create(file1 <- tempfile(tmpdir = dir1))
#> [1] TRUE
file.create(file2 <- tempfile(tmpdir = dir1))
#> [1] TRUE
file1
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/testdir\\file16dc26b5cb7"
file2
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/testdir\\file16dc2b0816fe"
list.files(dir1, full.names = T)
#> [1] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/testdir/file16dc26b5cb7" 
#> [2] "C:\\Users\\chris\\AppData\\Local\\Temp\\RtmpmusYkh/testdir/file16dc2b0816fe"

# we can delete the all directory with `unlink`. It deletes also the directory
unlink(dir1, recursive = T)
dir.exists(dir1)
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)