我有一个包含许多子目录的目录。我将list.dirs与list.files结合使用,以查找包含特定文件的目录。找到文件后,我想从list.dirs列表中删除子目录,这样我就可以在其余目录中查找不同的文件。我们的想法是让代码遍历所有目录,查找符合我在list.files中指定的模式的文件,同时从list.dirs目录列表中删除找到文件的目录。这是一个示例目录设置:
subdir1
filea.txt
subdir2
fileb.txt
subdir3
filea.txt
我尝试为文件的存在编写一个If语句,然后从目录列表中删除当前的子目录,但是不成功:
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时,它会列出:
subDirsPaths
"./subdir1" "./subdir2" "./subdir3"
运行此代码后我想要的是:
subDirsPaths
"./subdir2"
如您所见,由于在subdir1和subdir3中找到了filea.txt,因此它们已从目录列表中删除。
答案 0 :(得分:0)
我想出来了。问题是我如何尝试从目录列表中删除目录。当前目录列为subDirsPath,我试图从名为subDirsPaths的目录列表中删除它。
我最初尝试使用此声明来完成此任务:
subDirsPaths <- subDirsPaths[-subDirsPath]
我用以下解决方案替换了这一行:
subDirsPaths <- subDirsPaths[!subDirsPaths %in% grep(paste0(subDirsPath, collapse = "|"), subDirsPaths, value = T)]