Можно ли использовать R для автоматизации миграции файлов? - PullRequest
0 голосов
/ 04 июня 2019

Основываясь на некоторых ответах, я отредактировал исходное сообщение, чтобы сделать его более конкретным:)

Проблема - я хотел бы выяснить, как автоматизировать миграцию файлов.

Это фрагмент файловой структуры в каталоге "... / test"

  • 011_433

  • 9087_345

  • new_files

В папках 011_433 и 9087_345 содержатся файлы с некоторыми строковыми шаблонами, например, файлы с именами «B_14» или «B_15» в имени файла.Файлы чередуются между папками, поэтому файлы с B_14 не находятся в одной папке (то же самое верно для файлов с другими шаблонами).Папка new_files - это место, куда я хотел бы перенести файлы, чтобы они находились в папках, названных в соответствии с их шаблоном, таких как:

Каталог "... / test / new_files" будет иметь подкаталоги, такие как:

  • B_14

  • B_15

, где каждая папка будет содержать файлы с именами, имеющими строковый шаблонсопоставление имени папки.

Это то, что я сделал до сих пор, и это работает, но я действительно в растерянности относительно того, как автоматизировать его, кроме этого, поскольку нет никаких рифм или причин дляимена шаблонов файлов.

library(filesstrings)

path <- "C:/my_directory/test/"
setwd(path)

#get a list of all files in test directory sub folders that match a specific #string pattern
B_14_ <- list.files(path, pattern = "_B-14", recursive = TRUE) 

#move all the files from test into their respective folder under 'new_files'
file.move(B_14_, "C:/my_directory/test/new_files/B_14"


#repeat for the next pattern....
B_15_ <- list.files(path, pattern = "_B-15", recursive = TRUE)
file.move(B_15_, "C:/my_directory/test/new_files/B_15"

#etc.

У меня вопрос: можно ли его еще автоматизировать?Если бы у меня был список всех строковых шаблонов, мог бы я как-то включить это в?

Спасибо за помощь!

1 Ответ

0 голосов
/ 05 июня 2019

Конечно, вот еще один уровень абстракции:

path <- "C:/my_directory/test/"
setwd(path)
patts = c("B-14", "B-15")
dirs = sub(pattern = "-", replacement = "_", x = patts, fixed = TRUE)

for (i in seq_along(patts)) {
  files <- list.files(path, pattern = paste0("_", patts[i]), recursive = TRUE) 
  file.move(files, paste0("C:/my_directory/test/new_files/", dirs[i]"))
}
...