自动删除文件/文件夹

有没有办法自动删除所有 R 命令行较少的文件或文件夹? 我知道 unlink()file.remove()函数,但是对于这些函数,您需要定义一个字符向量,其中包含您想要删除的所有文件的名称。我更希望看到的是列出特定路径中的所有文件或文件夹(例如“ C:/Temp”) ,然后删除所有具有特定名称的文件(不管其扩展名)。

非常感谢您的帮助!

45453 次浏览

也许你只是在寻找 file.removelist.files的组合:

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

我想您可以使用 grepgrepl将文件列表过滤到那些名称匹配某种模式的文件,不是吗?

使用 dir 和 grep 的组合并不太糟糕。这个函数还可以告诉您要删除哪些文件,如果不是您所期望的,它还可以给您一个中止的机会。

# Which directory?
mydir <- "C:/Test"
# What phrase do you want contained in
# the files to be deleted?
deletephrase <- "deleteme"


# Look at directory
dir(mydir)
# Figure out which files should be deleted
id <- grep(deletephrase, dir(mydir))
# Get the full path of the files to be deleted
todelete <- dir(mydir, full.names = TRUE)[id]
# BALEETED
unlink(todelete)
dir_to_clean <- tempdir() #or wherever


#create some junk to test it with
file.create(file.path(
dir_to_clean,
paste("test", 1:5, "txt", sep = ".")
))


#Now remove them (no need for messing about with do.call)
file.remove(dir(
dir_to_clean,
pattern = "^test\\.[0-9]\\.txt$",
full.names = TRUE
))

您还可以使用 unlink作为 file.remove的替代品。

对于已知路径中的所有文件,您可以:

unlink("path/*")

我非常喜欢 here::here,因为它可以帮助我找到通过文件夹的方法(特别是当我在内联评估和 Rmarkdown 笔记本的编织版本之间切换时) ... ... 还有另一种解决方案:

    # Batch remove files
# Match files in chosen directory with specified regex
files <- dir(here::here("your_folder"), "your_pattern")


# Remove matched files
unlink(paste0(here::here("your_folder"), files))

删除文件夹中的所有内容,但保持文件夹为空

unlink("path/*", recursive = T, force = T)

删除文件夹中的所有内容,并同时删除该文件夹

unlink("path", recursive = T, force = T)

使用 force = T,覆盖任何只读/隐藏/等问题。