Pseudo code: # foreach $file ( @files ) { # save off a copy of the current compressed file if it exists # attempt to add to current compressed file # if compression fails or new file size > 2GB # rename the saved compression file copy to the working copy # start a new compressed file # add file to compressed file # end # end foreach