将带有列表的文件移动到新目录,使用R保留原始子目录

时间:2017-01-11 18:28:33

标签: r

我有一个500,000个文件及其路径的列表,我需要将它们移动到新目录,但保留文件夹结构。

    > head(list.of.files)
    [1] "F:\\Client X/Geochem/all.txt"                                                                                
    [2] "F:\\Client X/Geochem/Rock Sample.xlsx"                             
    [3] "F:\\Client X/Geochem/DataDump/2006 Humus Sampling/every5.txt"
    > 

我尝试使用file.copy来执行此操作,但所有文件都复制到单个目标文件夹而不保留子目录结构。我使用列表执行此操作的原因是我只从原始文件夹中移动某些文件。我已经完成了关于此的所有帖子,但似乎无法找到适合这个特定问题的问题。我的最终文件夹结构应如下所示:

    [1] "F:\\Client X Copy/Client X/Geochem/all.txt"
    [2] "F:\\Client X Copy/Client X/Geochem/Rock Sample.xlsx" 
    [3] "F:\\Client X Copy/Client X/Geochem/DataDump/2006 Humus Sampling/every5.txt"  

以下是我使用的代码:

    current.folder <- "F:\\Client X"
    new.folder <- "F:\\Client X Copy"
    list.of.files <- list.files(current.folder,full.names=TRUE, recursive = TRUE)
    file.copy(list.of.files, new.folder)

任何建议都会非常感激!

1 个答案:

答案 0 :(得分:1)

file.copy不会复制可以解决的目录树结构     通过在Windows平台上使用xcopy DOS命令创建空     目录结构。我在Windows上测试过这个很小的测试     案件和工作正常。 (* nix平台中的rysnc将用于相同目的,未经测试)

创建文件路径:

list.of.files = c(
"F:\\Client X/Geochem/all.txt"                                                                                
,"F:\\Client X/Geochem/Rock Sample.xlsx"                             
,"F:\\Client X/Geochem/DataDump/2006 Humus Sampling/every5.txt")

list.of.files
#[1] "F:\\Client X/Geochem/all.txt"                                
#[2] "F:\\Client X/Geochem/Rock Sample.xlsx"                       
#[3] "F:\\Client X/Geochem/DataDump/2006 Humus Sampling/every5.txt"

#Use gsub to edit destination paths

list.of.dest.files = gsub("Client X","Client X Copy",list.of.files)
list.of.dest.files
#[1] "F:\\Client X Copy/Geochem/all.txt"                                
#[2] "F:\\Client X Copy/Geochem/Rock Sample.xlsx"                       
#[3] "F:\\Client X Copy/Geochem/DataDump/2006 Humus Sampling/every5.txt"

复制Tree Strcuture:

#Create directory tree structure without copying any files
#https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true
#Note the usage of single and double quotes to address issue of white space
#in file paths

system('xcopy "F:\\Client X" "F:\\Client X Copy"  /t')

#unix equivalent
#http://serverfault.com/questions/204303/how-do-i-copy-a-directory-tree-but-not-the-files-in-linux
#system("rsync -av -f"+ */" -f"- *" /path/to/src /path/to/dest/")

复制文件:

for(i in 1:length(list.of.files)){
 cat("Copying file:",list.of.files[i],"\n")
 file.copy(list.of.files[i],list.of.dest.files[i])
}

强烈建议在Windows上使用babun,它可以很好地模拟unix环境,并使用cpmv等有用的实用程序(文件复制/移动),findgrep(搜索文件/目录),diff(文件中的差异),du(磁盘使用情况)等。