自动删除文件/文件夹
Posted
技术标签:
【中文标题】自动删除文件/文件夹【英文标题】:Automatically Delete Files/Folders 【发布时间】:2012-03-06 23:18:51 【问题描述】:有没有什么方法可以用很少的 R 命令行自动删除所有文件或文件夹?
我知道unlink()
或file.remove()
函数,但对于那些你需要定义一个字符向量,其中包含要删除的文件的所有名称。我正在寻找更多列出特定路径中所有文件或文件夹的内容(例如“C:/Temp”),然后删除具有特定名称的所有文件(无论其扩展名如何)。
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:也许您只是在寻找file.remove
和list.files
的组合?可能是这样的:
do.call(file.remove, list(list.files("C:/Temp", full.names = TRUE)))
我猜您可以使用grep
或grepl
将文件列表过滤到名称与特定模式匹配的文件,不是吗?
【讨论】:
并且可能使用list.files
的pattern
参数(或dir
是同义词)。我认为它们默认生成一个向量,因此需要在它们周围包裹一个 list
调用以使用 do.call
。
伙计们,当我像你说的那样尝试 do.call 时,我收到此错误消息:[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 警告消息:1:在函数中(...):无法删除文件“Sim2003.dbf”,原因是“没有这样的文件或目录”
这使得我指定的目录中似乎没有文件(没有文件)......这有点奇怪,因为文件在那里......如果我只是使用列表.files('C:/Temp') 它给了我所有正确的...我做错了什么?
好的,我解决了...您需要在 list.files() 函数中添加 full.names=TRUE...否则它不会仅通过相对路径找到它们...
你不需要do.call
;看我的回答。【参考方案2】:
对于已知路径中的所有文件,您可以:
unlink("path/*")
【讨论】:
为什么这不是投票率最高的解决方案?这非常有效。 需要注意的一点:此方法会永久删除所有内容;文件无法在回收站中恢复。 最佳解决方案,但有时不起作用。recursive=TRUE
& force=TRUE
有帮助。我在linux上。
这拒绝删除我的 Windows 10 中的目录,即使使用 recursive=TRUE 和 force=TRUE 参数。目录的结构是文件夹/文件夹/文件,我尝试用unlink()删除最上面的文件夹。
任何将文件移动到回收站/垃圾箱的替代方案?【参考方案3】:
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
。
【讨论】:
如果我想删除位置索引未显示在位置索引向量中的文件怎么办?例如,文件是:a.txt、b.txt、c.txt 和我的向量 v @Nanami:阅读regular-expressions.info/quickstart.html 和?regex
。如果您仍然卡住,请使用标签 regex
提问。
谢谢。尽管我最终在我的正则表达式中删除了^
和$
,但我在我的代码中使用了它,我认为这是使它起作用的更改。不能说我对此进行了彻底的测试。
这是一个很好的解决方案。也可以通过仅指定目录来工作(用于启发像我这样的其他不太懂 R 的用户)。 "file.remove(dir(path = "01 Data/", pattern = "my_pattern", full.names = TRUE))【参考方案4】:
结合使用 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
接受pattern
参数,因此您不需要单独使用grep
。
@RichieCotton 好点。我会注意到这一点,因为我并不经常使用 dir 并且 grep 对我来说似乎是一个自然的解决方案。【参考方案5】:
删除文件夹内的所有内容,但保持文件夹为空
unlink("path/*", recursive = T, force = T)
删除文件夹内的所有内容,同时删除文件夹
unlink("path", recursive = T, force = T)
使用force = T
,覆盖任何只读/隐藏/等。问题。
【讨论】:
【参考方案6】:我非常喜欢 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))
【讨论】:
以上是关于自动删除文件/文件夹的主要内容,如果未能解决你的问题,请参考以下文章