using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; using Newtonsoft.Json; using RedundancyFinder; using Spectre.Console; using Spectre.Console.Cli; namespace RedundancyFinderCLI { internal sealed class SanitizeCommand : Command { public sealed class Settings : CommandSettings { [Description("Path to sanitize.")] [CommandArgument(0, "[path]")] public string? Path { get; init; } [Description("Show all information.")] [CommandOption("-v|--verbose")] [DefaultValue(false)] public bool Verbose { get; init; } } public override int Execute([NotNull] CommandContext context, [NotNull] Settings settings) { Global.WriteLine($"[white]Sanitizing {settings.Path}[/]"); Global.WriteLine($"[yellow]Deleting empty folders[/]"); int count = DeleteEmptyFolders(settings.Path); Global.WriteLine($"[green]Deleted [/]{count}[green] empty folders[/]"); return 0; } public static int DeleteEmptyFolders(string directoryPath, int count = 0) { try { // Get all subdirectories foreach (var subDirectory in Directory.GetDirectories(directoryPath)) { // Recursively delete empty folders in subdirectories count = DeleteEmptyFolders(subDirectory, count); } // Check if the current directory is empty if (Directory.GetFiles(directoryPath).Length == 0 && Directory.GetDirectories(directoryPath).Length == 0) { Directory.Delete(directoryPath); count++; Global.WriteLine($"Deleted empty folder: {directoryPath}"); } } catch (Exception ex) { Global.WriteLine($"[red]Error deleting folder [/]'{directoryPath}':\n [red]{ex.Message}[/]"); } return count; } } }