2012-02-15 77 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)