package extract import "strings" type format int const ( formatNone format = iota formatZip formatTar formatTarGzip formatTarBzip2 ) var knownSuffixes = []struct { suffix string format format }{ {".tar.gz", formatTarGzip}, {".tgz", formatTarGzip}, {".tar.bz2", formatTarBzip2}, {".tbz2", formatTarBzip2}, {".tbz", formatTarBzip2}, {".tar", formatTar}, {".zip", formatZip}, } func detect(name string) (format, string) { lowerName := strings.ToLower(name) for _, known := range knownSuffixes { if strings.HasSuffix(lowerName, known.suffix) { return known.format, known.suffix } } return formatNone, "" } func IsArchive(name string) bool { archiveFormat, _ := detect(name) return archiveFormat != formatNone } func DirectoryName(archiveName string) string { _, suffix := detect(archiveName) base := strings.Trim(archiveName[:len(archiveName)-len(suffix)], ". ") if base == "" { return "extracted" } return base }