Skip to content

Instantly share code, notes, and snippets.

@adamscott
Last active June 16, 2016 20:10
Show Gist options
  • Save adamscott/53c785af36b91d5ad12983f35f1a3020 to your computer and use it in GitHub Desktop.
Save adamscott/53c785af36b91d5ad12983f35f1a3020 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import os
import os.path
import time
import math
import subprocess
import sys
filename = None
try:
filename_index = sys.argv.index("--filename")
filename = sys.argv[filename_index + 1]
except ValueError as err:
print("filename not found")
sys.exit(1)
finally:
if filename is None:
filename = ""
try:
splitsize_index = sys.argv.index("--bytes")
splitsize = sys.argv[splitsize_index + 1]
except ValueError as err:
splitsize = None
finally:
if splitsize is None:
#splitsize = 1000 * 1000 * 1000 * 4.71 - 1024
splitsize = 1024 * 1024 * 5
chunksize = 1024 * 1024
letters_width = 2
letters = ["a", "b", "c", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
def get_suffix(index):
suffix_array = []
while True:
quotient = math.floor(index/26)
letter_index = index % 26
suffix_array.append(letters[letter_index])
if quotient > 0:
index = quotient
else:
break
if letters_width - len(suffix_array) > 0:
for i in range(0, letters_width - len(suffix_array)):
suffix_array.append("a")
suffix_str = ""
for i in range(0, letters_width):
suffix_str += suffix_array.pop()
return suffix_str
_data_leftover = None
def read_stdin(size, chunksize):
global _data_leftover
bytes_read = 0
while True:
if bytes_read > size:
break
if _data_leftover is not None:
data = _data_leftover
_data_leftover = None
data += sys.stdin.buffer.read(chunksize - len(data))
else:
data = sys.stdin.buffer.read(chunksize)
bytes_read += len(data)
if bytes_read > size:
excedent = bytes_read - size
excedent_index = len(data) - excedent
_data_leftover = data[excedent_index:len(data) - 1]
data = data[0:excedent_index - 1]
if data:
yield data
else:
break
def run():
global _data_leftover
i = 0
directory = 'backup'
os.makedirs(directory, exist_ok=True)
while True:
if not _data_leftover:
_data_leftover = sys.stdin.buffer.read(1024)
if not _data_leftover:
break
# Create a file
suffix = get_suffix(i)
split_filename = "{}/{}.{}".format(directory, filename, suffix)
print("==> Creating {}...".format(split_filename))
with open(split_filename, 'w+b') as w:
for chunk in read_stdin(splitsize, 1024 * 1024):
w.write(chunk)
w.close()
print("Done.")
print("Creating sha256 file.")
shasum = subprocess.getoutput("sha256sum {}".format(split_filename))
with open("{}.sha256".format(split_filename), 'w') as w:
w.write(shasum)
print("Waiting {} to be deleted...".format(split_filename))
while True:
time.sleep(1)
if not os.path.isfile(split_filename):
break
i += 1
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment