2012-02-15 76 views
34

有什么方法可以自动删除R命令行少的所有文件或文件夹? 我知道unlink()file.remove()函数,但是对于那些需要定义一个字符向量的人来说,其中的所有文件名都要删除。我正在寻找更多的东西,列出特定路径(例如'C:/ Temp')中的所有文件或文件夹,然后删除具有某个名称(不管其扩展名)的所有文件。自动删除R中的文件/文件夹

任何帮助非常感谢!

回答

39

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

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

我想你可以过滤的文件列表到那些名字匹配使用grepgrepl,没有一定的模式?

+2

,并可能使用'pattern'参数到'list.files'(或者'dir'是一个同义词)。我认为它们默认会产生一个向量,所以需要在它们周围包装一个“list”调用来处理'do.call'。 – James 2012-02-15 15:56:12

+1

伙计们,当我尝试do.call像你说的我得到这个错误信息:[1]假否假假假假假 警告消息: 1:在函数(...): 不能删除文件' Sim2003.dbf',原因'没有这样的文件或目录' – Francesco 2012-02-15 16:29:42

+0

这使得它似乎没有文件(没有文件)在我指定的目录中...这是有点奇怪,因为文件是有的...和如果我只是使用list.files('C:/ Temp')它给了我所有正确的...我做错了什么? – Francesco 2012-02-15 16:31:30

3

结合使用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) 
+0

'dir'采用'pattern'参数,所以你不需要单独使用'grep'。 – 2012-02-15 17:09:31

+0

@RichieCotton好点。我会注意到这一点,因为我没有经常使用dir,grep对我来说似乎是一个自然的解决方案。 – Dason 2012-02-15 19:23:30

17
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

+0

+1很好! – joran 2012-02-15 20:13:33

+0

如果我想删除其位置指示不显示在位置指示向量中的文件,该怎么办?例如,这些文件是:a.txt,b.txt,c.txt和我的向量v < - c(1,3)。结果应该只显示文件:a.txt和c.txt – Nanami 2013-07-23 11:51:32

+0

@Nanami:阅读http://www.regular-expressions.info/quickstart.html和'?regex'。如果你仍然陷入困境,那么用标签'regex'问一个问题。 – 2013-07-25 09:38:49

15

对于已知路径可以将所有文件:

unlink("path/*") 
+7

为什么这不是最高投票解决方案?这很奇妙。 – Zediiiii 2016-03-24 18:55:42

+1

有一点需要注意:这种方法可以删除所有内容;文件无法在回收站内恢复。 – 2017-06-30 02:37:04

0

要删除特定扩展名的文件,这也link可以遵循,

junk <- dir(path="your_path", pattern="your_pattern") 
file.remove(junk)