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

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

非常感谢任何帮助!

【问题讨论】:

    标签: r file path directory delete-file


    【解决方案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))
      

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 2013-03-18
        相关资源
        最近更新 更多