!include once #1024944 // Apache Commons Compress import org.apache.commons.compress.archivers.tar.*; svoid zip2tar_withPredicate(File inZip, File outTar, IF1 predicate) ctex { temp FileOutputStream out = newFileOutputStream(outTar); zip2tar_withPredicate(inZip, out, predicate); } svoid zip2tar_withPredicate(File inZip, OutputStream out, IF1 predicate) { zip2tar_withPredicate(inZip, bufferedOutputStream(out), predicate); } svoid zip2tar_withPredicate(File inZip, BufferedOutputStream out, IF1 predicate) ctex { TarArchiveOutputStream tarOut = new(out); tarOut.setLongFileMode(tarOut.LONGFILE_GNU); zip2tar_withPredicate(inZip, tarOut, predicate); out.flush(); } svoid zip2tar_withPredicate(File inZip, TarArchiveOutputStream outTar, IF1 predicate) ctex { ZipFile zipFile = new ZipFile(inZip); Enumeration entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); continue unless predicate.get(entry.getName()); TarArchiveEntry te = new(entry.getName()); te.setModTime(entry.getTime()); te.setSize(entry.getSize()); outTar.putArchiveEntry(te); InputStream fin = zipFile.getInputStream(entry); copyStream(fin, outTar); fin.close(); } outTar.flush(); zipFile.close(); }