Try this recursive query which is linear-time in input (timing study herehere)
trie = Query[GroupBy@First, If[First@# == {}, {}, trie@#] &, Rest];
Variations on the above are possible and useful (see Antonov's Trie page here developed in 2013 but without Dataset).
Assume filenames have been split into path component lists, eg "a/b/c"
--> {"a","b","c"}
:
flatFiles = FileNames["*.gsheet", "~/Google Drive/...", Infinity] // Dataset
Then:
flatFiles[All, StringSplit[#, "/"] &][trie]