Shinyapp用于重命名多个文件

时间:2018-02-21 06:54:15

标签: r shiny

您好我正在尝试创建一个允许一次重命名多个文件的闪亮应用。我想我的问题是如何调用服务器中的一个函数来更改指定目录中文件的名称。

library(shiny)

ui <- fluidPage(
  titlePanel("Rename Multiuple files"),

  sidebarLayout(
    sidebarPanel(
      textInput("input_dir", label = "Choose Input Directory"),
      textInput("search_pattern", label = "Choose a search pattern"),
      textInput("replacement", label = "Choose a replacement pattern"),
      submitButton('Submit')
    ),
    mainPanel(
      h4("You're directory"),
      textOutput("directory"),
      textOutput("search_pattern")
    )
  )
)

rename.files = function(input_dir, search_pattern, replacement){

  filez = list.files(input_dir, pattern = search_pattern )
  sapply(filez,FUN=function(eachPath){
    file.rename(from=eachPath,to=sub(pattern = search_pattern,
                                     replacement = replacement,eachPath))})
}

server <- function(input, output, session) {
  output$directory = renderText({input$input_dir})
  output$search_pattern = renderText({input$search_pattern})
  output$replacement = renderText({input$replacement})


  reactive(rename.files(input$input_dir,input$search_pattern,input$replacement))

}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:3)

这是一种可以指向正确方向的可能性。请注意,我使用shinyDirPicker中的shinyFiles来获取用户的目录。

希望这有帮助!

enter image description here

library(shiny)
library(shinyFiles)

ui <- fluidPage(
  titlePanel("Rename Multiple files"),

  sidebarLayout(
    sidebarPanel(
      shinyDirButton('directory','Select Directory:','Select Directory:'),
      textInput("search_pattern", label = "Choose a search pattern"),
      textInput("replacement", label = "Choose a replacement pattern"),
      actionButton('submit','Submit')
    ),
    mainPanel(
      h4("Your directory"),
      textOutput("directory"),
      textOutput("search_pattern")
    )
  )
)


server <- function(input, output, session) {

  shinyDirChoose(input,'directory',roots=c(wd='.'))

  observeEvent(input$submit,{
    directory = parseDirPath(roots = c(wd='.'), input$directory)
    myfiles = list.files(directory)
    new_names = gsub(input$search_pattern,input$replacement,myfiles)
    file.rename(paste0(directory,'/',myfiles),paste0(directory,'/',new_names))
    })
}

shinyApp(ui = ui, server = server)