自动删除文件/文件夹

Posted

技术标签:

【中文标题】自动删除文件/文件夹【英文标题】:Automatically Delete Files/Folders 【发布时间】:2012-03-06 23:18:51 【问题描述】:

有没有什么方法可以用很少的 R 命令行自动删除所有文件或文件夹? 我知道unlink()file.remove() 函数,但对于那些你需要定义一个字符向量,其中包含要删除的文件的所有名称。我正在寻找更多列出特定路径中所有文件或文件夹的内容(例如“C:/Temp”),然后删除具有特定名称的所有文件(无论其扩展名如何)。

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

也许您只是在寻找file.removelist.files 的组合?可能是这样的:

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

我猜您可以使用grepgrepl 将文件列表过滤到名称与特定模式匹配的文件,不是吗?

【讨论】:

并且可能使用list.filespattern 参数(或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))

【讨论】:

以上是关于自动删除文件/文件夹的主要内容,如果未能解决你的问题,请参考以下文章

mysql自动备份数据库与自动删除临时文件

自动删除文件夹的批处理命令

如何删除自动配置脚本

如何使用 rtorrent 中的移动/删除文件自动删除种子?

如何为inux系统删除文件自动重启服务

linux系统如何自动删除几天前文件夹