Ich habe ein Verzeichnis mit vielen Unterverzeichnissen. Ich verwende list.dirs in Kombination mit list.files, um Verzeichnisse zu finden, die eine bestimmte Datei enthalten. Sobald die Datei gefunden ist, möchte ich das Unterverzeichnis aus der Liste list.dirs entfernen, damit ich in den verbleibenden Verzeichnissen nach verschiedenen Dateien suchen kann. Die Idee ist, dass der Code alle Verzeichnisse durchsucht, die nach einer Datei suchen, die dem Muster entspricht, das ich in list.files angegeben habe, und dabei die Verzeichnisse, in denen die Datei gefunden wurde, aus der Verzeichnisliste list.dirs entfernt. Hier ist ein Beispiel-Verzeichnis Setup:Verzeichnis aus list.dirs entfernen/filtern, wenn Datei existiert, r
subdir1
filea.txt
subdir2
fileb.txt
subdir3
filea.txt
ich für die Existenz einer Datei eine If-Anweisung versucht zu schreiben, um dann das aktuelle Unterverzeichnis aus der Liste der Verzeichnisse zu entfernen, aber war erfolglos:
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 {}
}
}
Danach lief ist, möchte ich auf die Verzeichnisse nur ein weiteres
for(subDirsPath in subDirsPaths) {}
Aber dieses Mal ausführen, die nicht auf die Dateien enthalten habe ich wurde in dem vorherigen Codeblock suchen, einem so weiter.
Wenn ich subDirsPaths in das Terminal eingeben es auflistet:
subDirsPaths
"./subdir1" "./subdir2" "./subdir3"
Was ich will, nachdem ich diesen Code ausführen, ist dies:
subDirsPaths
"./subdir2"
Wie Sie sehen können, da DateiA.txt gefunden wurde In Unterverzeichnis1 und Unterverzeichnis3 wurden sie aus der Liste der Verzeichnisse entfernt.
Würde der 'recurse' Option in' list.files' in Kombination mit der 'full.names = TRUE' Option einfacher? –
Nein, weil ich in meinem tatsächlichen Verzeichnis zusätzliche Unterverzeichnisse innerhalb dieser Unterverzeichnisse habe, die die Rekursivoption komplizieren. –
nicht sicher, ob ich verstehe, was Sie wollen, aber suchen Sie nicht nach 'basename'? –