creating size-limited tar files

andrea crotti andrea.crotti.0 at gmail.com
Fri Nov 9 11:39:21 CET 2012


Anyway in the meanwhile I implemented this tar and split in this way below.
It works very well and it's probably much faster, but the downside is that
I give away control to tar and split..

def tar_and_split(inputfile, output, bytes_size=None):
    """Take the file containing all the files to compress, the bytes
    desired for the split and the base name of the output file
    """
    # cleanup first
    for fname in glob(output + "*"):
        logger.debug("Removing old file %s" % fname)
        remove(fname)

    out = '-' if bytes_size else (output + '.tar.gz')
    cmd = "tar czpf {} $(cat {})".format(out, inputfile)
    if bytes_size:
        cmd += "| split -b {} -d - {}".format(bytes_size, output)

    logger.info("Running command %s" % cmd)

    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
    out, err = proc.communicate()
    if err:
        logger.error("Got error messages %s" % err)

    logger.info("Output %s" % out)

    if proc.returncode != 0:
        logger.error("Something failed running %s, need to re-run" % cmd)
        return False


More information about the Python-list mailing list