2016-05-31 14 views
0

それぞれに多数のファイルがある3つのフォルダがあると仮定して、各サブディレクトリからいくつかのファイルのみを選択し、新しいフォルダ。複数のサブディレクトリから1つのフォルダに特定のファイルをコピーするR

  • デスクトップ/ DIR/sub_11s_gi01_ab
  • デスクトップ/ DIR/sub_11f_gi01_b
  • デスクトップ/ DIR/sub_12s_gi02_ms

拡張子を持つコピーする必要があるファイル: のは3つのフォルダを呼ぶことにしましょう".wang.tax.sum"

その他のファイルはすべてコピーしてから削除することができません。他の質問から

は、私がリストにすべてのファイルを結合し、それらのすべてをコピーするが、私は.wang.tax.sum
私はグレップを使用することができますで終わるファイルのみをコピーする方法がわからないことができます私は転送するファイルのリストを取得するが、そのサブディレクトリにあるそのファイルのリストを新しいフォルダにコピーする方法は不明です。 これまで私がこれまで持っていたことは、うまくいきません。

parent.folder <- "C:/Desktop/dir" 
my_dirs <- list.files(path = parent.folder, full.names = T, recursive = T, include.dirs = T) 

##this does not work## 
a <- grep("wang.tax.sum",my_dirs) 
my_dirs <- my_dirs[a] 

files <- sapply(my_dirs, list.files, full.names = T) 

dir.create("taxsum", recursive = T) 

for(file in files) { 
    file.copy(file, "taxsum") 
} 

私はgrepのがここで働いていないことを知っているが、私は私が欲しいと単一のフォルダにコピーするファイルを選択し、関数を作成するかどうかはわかりません。合計約50GBのサブフォルダを持っていますので、すべてのデータをコピーしてから、不要なものを削除することはオプションではありません。どんな助けでも大歓迎です

答えて

0
parent.folder <- "C:/Desktop/dir" 
files <- list.files(path = parent.folder, full.names = T, recursive = T, include.dirs = T) 

は、この後には、関連するファイルを選択する必要があります1つのステップでlist.filesへのpattern引数でこれを行う:

files <- list.files(path = parent.folder, full.names = T, recursive = T, include.dirs = T, pattern = "wang\\.tax\\.sum") 

は、新しいディレクトリの作成:

dir.create("taxsum", recursive = T) 

は今、あなたは、新しいファイル名を作成する必要があります。

newnames <- paste0("taxsum/", gsub("/|:", "_", files)) 
# replace "special" characters with underscore 
# so that your file names will be different and contain the 
# original path 

# alternatively, if you know that file names will be different: 
newnames <- paste0("taxsum/", basename(files)) 

そして今、あなたがコピーするmapplyを使用することができます(同じことは少し余分な労力でforで行うことができます):

mapply(file.copy, from=files, to=newnames) 
+0

ありがとうございました。 –

0

my_dirsにはすでに完全なファイル名が含まれており、files変数を作成する必要はありません。

parent.folder <- "Desktop" 
ext <- ".jpg"     # Wanted file extension 

my_dirs <- list.files(path = parent.folder, 
    full.names = TRUE, recursive = TRUE, include.dirs = TRUE) 

dir.create("Desktop/temp", recursive = TRUE) 

n <- sapply(my_dirs[grep(ext, my_dirs)], 
    FUN=function(x) file.copy(from = x, to = "Desktop/temp/")) 

message(paste("Number of files in", parent.folder, "with", ext, ":", length(n), 
    "(successully copied:", round(sum(n)/length(n)*100, 0), "%).")) 

# Number of files in Desktop with .jpg : 4 (successully copied: 100 %). 

変数nは、あなたがファイルをコピー中に何らかの問題が発生した場合に探索することができますという名前の論理ベクトルを、含まれています。

それとも、可能性 - :(ドットはgrepのための特別な意味を持ってい\\.。ドットの前に二重エスケープに注意してください)

files <- files[grep("wang\\.tax\\.sum", files)] 

関連する問題