diff --git a/src/SeafileCli/VerbHandler/UploadHandler.cs b/src/SeafileCli/VerbHandler/UploadHandler.cs index 7fba83a..f4f2a98 100644 --- a/src/SeafileCli/VerbHandler/UploadHandler.cs +++ b/src/SeafileCli/VerbHandler/UploadHandler.cs @@ -1,5 +1,8 @@ using System; +using System.CodeDom; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using SeafileCli.Argparse; @@ -23,7 +26,9 @@ private async Task RunAsync() var library = await session.GetLibrary(_options.Library); await session.CreateDirectoryWithParents(library, _options.Directory); - foreach (var file in _options.Files) + IEnumerable allfiles = CreateFilepathList(_options.Files); + + foreach (var file in allfiles) { try { @@ -45,5 +50,34 @@ public void Run() { RunAsync().Wait(); } + + + private IEnumerable CreateFilepathList(string[] fileNames) + { + string[] allfiles = fileNames; + IEnumerable calcFiles = new List(); + string directory = Directory.GetCurrentDirectory(); + + foreach (var file in _options.Files) + { + if (file.Contains("*")) // handle wildcard + { + if (file.Contains(@"\")) // check if directory path is included + { + directory = Path.GetDirectoryName(file); + } + + var fileName = Path.GetFileName(file); // e.g. *.zip + calcFiles = calcFiles.Concat(Directory.GetFiles(directory, fileName, SearchOption.TopDirectoryOnly)); + } + } + + if (calcFiles.Count() > 0) + { + allfiles = calcFiles.Distinct().ToArray(); // rm duplicated files + } + + return allfiles; + } } } \ No newline at end of file