2017-09-20 22 views
1

私は多くのサブディレクトリを持つディレクトリを持っています。私は特定のファイルを含むディレクトリを見つけるためにlist.dirsとlist.filesを組み合わせて使用​​しています。ファイルが見つかると、list.dirsリストからサブディレクトリを削除して、残りのディレクトリにある別のファイルを探すことができます。アイデアは、コードがディレクトリのlist.dirsリストからファイルが見つかったディレクトリを削除しながら、list.filesで示すパターンを満たすファイルを探しているすべてのディレクトリを通過するようにすることです。ここでは例のディレクトリの設定は次のとおりです。ファイルが存在する場合、list.dirsからディレクトリを削除/フィルタリングします。r

subdir1 
    filea.txt 
subdir2 
    fileb.txt 
subdir3 
    filea.txt 

私は、ディレクトリのリストから、現在のサブディレクトリを削除するファイルが存在する場合に文を書くしようとしましたが、成功していない:

subDirsPaths = list.dirs(path=".", full.names=TRUE) 

for (subDirsPath in subDirsPaths){ 
    setwd("/home/phil/Desktop/folder") 

    inFilePaths = list.files(path=".", pattern=glob2rx(print(paste("*","a.txt", sep=""))), full.names=TRUE) 
    for (inFilePath in inFilePaths){ 

     inFilePath2 <- gsub("./", "", inFilePath) 
     if (file.exists(print(paste(inFilePath2, sep="")))) 
     { 

     print("file exists") 
     subDirsPaths <- subDirsPaths[-subDirsPath] 
     } else {} 

    } 


    } 

これが実行された後、私は、私だけは、コードの前のブロックで探していたファイルが含まれていませんでしたディレクトリに別の

for(subDirsPath in subDirsPaths) {} 

しかし、この時間を実行したいですそうです。

私はそれが一覧表示されます端子にsubDirsPathsを入力:あなたが見ることができるようにfilea.txtが発見されて以来、

subDirsPaths 

"./subdir2" 

:私はこのコードを実行した後、私が欲しいもの

subDirsPaths 

"./subdir1" "./subdir2" "./subdir3" 

がこれですsubdir1とsubdir3では、それらはディレクトリのリストから削除されています。

+0

うに組み合わせてlist.files' 'で' recurse'オプションを'full.names = TRUE'オプションは簡単にできますか? –

+0

私の実際のディレクトリには、これらのサブディレクトリ内に再帰オプションを複雑にする追加のサブディレクトリがあるためです。 –

+0

私はあなたが欲しいものを理解しているのか分からないが、 'basename'を探していないのですか? –

答えて

0

私はこれを理解しました。問題は、ディレクトリのリストからディレクトリを削除しようとしたところです。現在のディレクトリは、subDirsPathsという名前のディレクトリのリストから削除しようとしているsubDirsPathとしてリストされています。

私が最初にこの文を使用してこれを実現しようとした:

subDirsPaths <- subDirsPaths[-subDirsPath] 

私は、以下の溶液を用いて、この行に置き換え:

subDirsPaths <- subDirsPaths[!subDirsPaths %in% grep(paste0(subDirsPath, collapse = "|"), subDirsPaths, value = T)] 
関連する問題