static async Task <int> Main(string[] args) { var app = new CommandLineApplication { Name = "SmartBackup", Description = "A simple and secure backup tool" }; app.HelpOption(inherited: true); app.Command("backup", backupCmd => { backupCmd.Description = "Create a backup of specified directory"; var sourceDirOption = backupCmd .Option("-s|--source-dir <PATH>", "Source directory to create backup", CommandOptionType.MultipleValue) .IsRequired() .Accepts(v => v.ExistingDirectory()); var targetDirOption = backupCmd .Option("-t|--target-dir <PATH>", "Target directory to put backup", CommandOptionType.SingleValue) .IsRequired() .Accepts(v => v.LegalFilePath()); var passwordOption = backupCmd .Option("-p|--password <PASSWORD>", "Password to encrypt backup files", CommandOptionType.SingleValue); var maxBackupSetsOption = backupCmd .Option <int>("-m|--max-backup <COUNT>", "Keep max backup sets and delete the oldest ones", CommandOptionType.SingleValue) .Accepts(v => v.Range(0, 1000)); backupCmd.OnExecuteAsync((cancellationToken) => { var param = new BackupParam(sourceDirOption.Values, targetDirOption.Value(), passwordOption.Value(), maxBackupSetsOption.ParsedValue); return(RunHostAsync <BackupCommand, BackupParam>(args, param, cancellationToken)); }); }); app.VersionOption("-v|--version", typeof(Program).Assembly.GetCustomAttribute <AssemblyInformationalVersionAttribute>().InformationalVersion); app.OnExecute(() => { app.Error.WriteLine("Specify a subcommand"); app.ShowHelp(); return(1); }); try { return(await app.ExecuteAsync(args)); } catch (CommandParsingException ex) { app.Error.WriteLine(ex.Message); return(-1); } }
public BackupCommand( IHostApplicationLifetime hostApplicationLifetime, ILogger <BackupCommand> logger, SHA256Generator hashGenerator, BackupParam backupParam, RecursiveFileEnumerator recursiveFileEnumerator, SevenZipCli sevenZipCli, IFileSystem fileSystem) { _hostApplicationLifetime = hostApplicationLifetime; _logger = logger; _hashGenerator = hashGenerator; _backupParam = backupParam; _recursiveFileEnumerator = recursiveFileEnumerator; _sevenZipCli = sevenZipCli; _fileSystem = fileSystem; }