public static void ToTar(this DirectoryInfo sourceDirectory, Stream output, string[] excludedDirectoryNames) { var archive = TarArchive.CreateOutputTarArchive(output); archive.RootPath = sourceDirectory.FullName.Replace(Path.DirectorySeparatorChar, '/').TrimEnd('/'); var entries = GetFiles(sourceDirectory, excludedDirectoryNames) .Select(x => TarEntry.CreateEntryFromFile(x.FullName)) .ToList(); var entriesCount = entries.Count(); var progressBar = new MegaByteProgressBar(); for (var i = 0; i < entriesCount; i++) { archive.WriteEntry(entries[i], true); progressBar.Update("Packing files", entries.Take(i + 1).Sum(x => x.Size), entries.Sum(x => x.Size)); } archive.Close(); }