【问题标题】:Move files with list to new directory keeping original sub-directory with R将带有列表的文件移动到新目录,并使用 R 保留原始子目录
【发布时间】:2017-01-11 18:28:32
【问题描述】:

我有一个包含 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)

任何建议将不胜感激!

【问题讨论】:

  • file.copy 中的 recursive=TRUE 参数可能会起作用。
  • 不,不幸的是,这些文件都被转储到根文件夹中并且不会创建子文件夹。
  • 无赖。我不确定 dir.create 中的 recursive=TRUE 参数有什么作用,但可能值得一试。
  • 我也试过了。没运气。我被难住了。
  • 感谢您的建议!我很感激。

标签: r


【解决方案1】:

file.copy不复制目录树结构可以解决 在Windows平台上使用xcopyDOS命令创建空 目录结构。我已经在 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"

复制树结构:

#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(搜索文件/ dir)、diff(文件差异)、du(磁盘使用情况)等

【讨论】:

  • 此解决方案完美运行。非常感谢您的 babun 推荐和出色的解决方案。非常感谢。
猜你喜欢
  • 2016-04-04
  • 2017-09-16
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2021-08-08
相关资源
最近更新 更多