using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
var filePaths = new string[] {
@"\\server\TestDB-1.bak",
@"\\server\TestDB_Customer (1).bak",
@"\\server\TestDB-3.bak",
@"\\server\TestDB_Customer_01.bak",
@"\\server\TestDB_Customer_02.bak",
@"\\server\TestDB_Customer_01_1.bak",
@"\\server\TestDB_Customer_01_1.bak",
@"\\server\TestDB-2.bak",
@"\\server\TestDB_Customer (2).bak",
@"\\server\TestDB_Customer_01_2.bak",
@"\\server\TestDB_Customer_03_1.bak",
@"\\server\TestDB_Customer_03_2.bak",
var fileNames = filePaths.Select(p => Path.GetFileNameWithoutExtension(p));
public static IEnumerable<IEnumerable<string>> dd(IEnumerable<string> fileNames) {
var longestFileName = fileNames.OrderByDescending(f => f.Length).First();
var result = new List<IEnumerable<string>>();
for(int i = 1; i < longestFileName.Length; i++)
var searchString = longestFileName.Substring(0, i);
var grouped = fileNames.GroupBy(f => f.StartsWith(searchString));
foreach (var item in grouped.ToArray()) {
result.AddRange(dd(item));
else if (grouped.Count() == fileNames.Count()) {
return new List<IEnumerable<string>>() { fileNames };