web-dev-qa-db-ja.com

tmpファイルの削除

私は this を読んで、tmpファイルを削除する方法について投稿します。その投稿の解決策は次のとおりです。

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

ディレクトリ「C:/ Temp」は、Windowsマシンではおそらく問題ありません。私はLinuxを使用しているので、自分のtmpファイルdirが何であるかわからなかったので、次のようにしました。

tmp <- tempfile()

これは、「/ tmp/RtmpNS80no/file147c37e54e8e」を返します。

だから、私はこれを試しました:

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

これは「logical(0)」を返すので、おそらく機能しませんでしたか?

すべてのtmpファイルを削除するにはどうすればよいですか?

8
Doug Fir


現在の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"
_

このパスは、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"
_

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
_
16
cderv

これは非常に簡単な方法です

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

それが機能したことを確認するには

dir(tempdir())
# character(0)
3
stevec