我有一个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)
任何建议都会非常感激!
答案 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环境,并使用cp
和mv
等有用的实用程序(文件复制/移动),find
和grep
(搜索文件/目录),diff
(文件中的差异),du
(磁盘使用情况)等。