1

为问题的简单性道歉,因为我是 R 的新手。

我有大量 1 分钟的音频文件,每 5 分钟录制 1 分钟。我需要它们按小时组织并保存到一个新文件夹中,因此每 12 个文件需要保存到一个新文件夹中。我有 7472 个这些文件,因此手动执行此操作将花费太长时间。

以下是文件名的示例:

20210111_000500.wav,
20210111_001000.wav,
20210111_001500.wav,
20210111_002000.wav,
20210111_002500.wav,
20210111_003000.wav,
20210111_003500.wav,
20210111_004000.wav,
20210111_004500.wav,
20210111_005000.wav,
20210111_005500.wav,

我希望全部放在一个文件夹中,下一小时开始 20210111_010000.wav,依此类推。

我该怎么做呢?

非常感谢任何帮助,谢谢!

4

2 回答 2

1

你可以尝试这些方面的东西。我首先找到所有 .wav 文件,然后定义文件夹,创建文件夹,最后将 .wav 文件移动到新文件夹中。

library(tidyverse)

setwd("path_where_wav_files_are_located_goes_here")

# a vector of paths to all .wav files in the specified directory
original_paths <- dir(pattern=".WAV$", full.names = T) %>% str_replace("\\.", getwd())
# only the file names
file_names <- dir(pattern=".WAV$")

# creating a data.frame with original paths and new paths where files are to be moved
df <- tibble(original_paths, file_names) %>%
  mutate(
    folder_name = (row_number() %/% 12 + 1) %>% paste0("_", .), # using integer division so that i have a dedicated folder for each 12 files
    new_path = paste0(getwd(), "/", folder_name, "/", file_names)
  )

# creating the directories
df$folder_name %>%
  unique() %>%
  paste0(getwd(), "/",  .) %>%
  map(
    ~dir.create(.x)
  )

# moving the files
walk2(df$original_paths, df$new_path, ~file.rename(.x, .y))
于 2021-04-21T15:43:28.207 回答
0

您可以执行以下操作:

nms <- list.files(pattern = "\\.wav", full.names = TRUE)
groups <- split(nms, format(strptime(nms, "%Y%m%d_%H%M%S"),"%Y%m%d_hour_%H"))

f <- function(x, y, folder = "my_folder"){
  if(!die.exists(folder)){
      fl <- dir.create(folder)
      stopifnot(fl)
   }
  new_dir <- file.path(folder, y)
  if(!dir.exists(new_dir)) dir.create(new_dir)
  file.copy(x, file.path(new_dir, basename(x)))
  file.remove(x)
}

Map(f, groups, names(groups))
于 2021-04-21T16:02:58.037 回答