【发布时间】:2017-09-20 06:56:36
【问题描述】:
我有一个包含很多子目录的目录。我将 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,因此它们已从目录列表中删除。
【问题讨论】:
-
list.files中的recurse选项与full.names = TRUE选项结合使用会更简单吗? -
否,因为在我的实际目录中,我在这些子目录中有额外的子目录,使递归选项复杂化。
-
不确定我是否明白你想要什么但你不是在寻找
basename吗? -
我尝试了 basename 但找到了对象。 list.dirs 包含列表中基本名称之前的 ./。我会将所需的输出添加到问题中以进行澄清。
标签: r