【问题标题】:Deleting tmp files删除 tmp 文件
【发布时间】:2018-02-04 06:08:06
【问题描述】:

我阅读了this 上有关如何删除 tmp 文件的帖子。该帖子中的解决方案是:

do.call(file.remove, list(list.files("C:/Temp", full.names = TRUE)))

目录“C:/Temp”可能适用于 Windows 机器。由于我在 linux 上,我不确定我的 tmp 文件目录是什么,所以我这样做了:

tmp <- tempfile()

返回:“/tmp/RtmpNS80no/file147c37e54e8e”

所以,我尝试了这个:

do.call(file.remove, list(list.files("tmp", full.names = TRUE)))

这会返回“logical(0)”,所以大概没有用?

如何删除我所有的 tmp 文件?

【问题讨论】:

  • list.files("tmp", full.names = TRUE) 给了什么?
  • list.files 中的目录位置是相对于你当前的工作目录的,所以你要么需要完整地拼出它,要么确保你在tmp 上面的目录中。也许您还需要在您的list.files 通话中使用recursive=TRUE
  • tempfile() 为您提供临时文件目录中临时文件的文件路径。使用tempdir() 找到 R 会话的临时目录位置。可以使用basename(tempdir()) 计算临时目录
  • 它是 dirname(tempdir()) 而不是 basename。对不起

标签: r temporary-files


【解决方案1】:


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

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

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

list.files(tmp_dir)
#> [1] "file16dc20539ab"  "file16dc4ad71f"   "file16dc5bab1716"
#> [4] "file16dc74d65663"

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

dirname(tmp_dir)
#> [1] "C:/Users/chris/AppData/Local/Temp"

此路径也包含在操作系统的环境变量中。 (很明显,我在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"

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"

我们可以在 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

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

readLines(tmp_file)
#> [1] "This is a temp file"

现在如果你想删除这个文件

file.remove(tmp_file)
#> [1] TRUE
file.exists(tmp_file)
#> [1] FALSE

如果要删除 R 会话临时文件夹中的所有文件,可以使用 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

我收到警告,因为有一个文件我无法删除(可能正在被 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

【讨论】:

  • 这很棒。请注意不要执行unlink(tempdir()),这将清除您当前 R 会话的所有临时文件并让坏事发生。
【解决方案2】:

这是一个非常简单的方法

unlink(paste0(normalizePath(tempdir()), "/", dir(tempdir())), recursive = TRUE)

确认它有效

dir(tempdir())
# character(0)

【讨论】:

    【解决方案3】:

    在花了几个小时了解如何使用 cmd 删除旧文件和文件夹之后,我最终编写了这个 R 脚本,我肯定会每周自动运行:

    #Windows Environmental variable %USERPROFILE%\AppData\Local\Temp
    PCTempDir <- Sys.getenv("TEMP")
    
    #detect and delete folders with pattern "Rtmp"
    folders <- dir(PCTempDir, pattern = "Rtmp", full.names = TRUE)
    unlink(folders, recursive = TRUE, force = TRUE, expand = TRUE)
    

    这将删除 Rtmp* 文件夹,其中包含已执行的 R 脚本留下的文件,因为我的计算机上有很多文件

    当然,这样的脚本也可以扩展以容纳其他文件夹

    【讨论】:

    • 你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多