mirror of
https://github.com/copy/v86.git
synced 2025-12-31 04:23:15 +00:00
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
|
||
|
|
import sys
|
||
|
|
import subprocess
|
||
|
|
import os.path
|
||
|
|
|
||
|
|
args = sys.argv
|
||
|
|
|
||
|
|
zstd = "--zstd" in args
|
||
|
|
gzip = "--gzip" in args
|
||
|
|
if zstd: args.remove("--zstd")
|
||
|
|
if gzip: args.remove("--gzip")
|
||
|
|
|
||
|
|
if len(args) != 4:
|
||
|
|
print("Usage: split-image.py [--zstd|--gzip] partsize filename-in filename-out-with-%d-%d")
|
||
|
|
exit(1)
|
||
|
|
|
||
|
|
(_, partsize_raw, infile, outfile) = sys.argv
|
||
|
|
partsize_raw = partsize_raw.lower()
|
||
|
|
if partsize_raw.endswith("m") or partsize_raw.endswith("mb"):
|
||
|
|
partsize_base = 1024 * 1024
|
||
|
|
partsize_raw = partsize_raw.removesuffix("mb").removesuffix("m")
|
||
|
|
elif partsize_raw.endswith("k") or partsize_raw.endswith("k"):
|
||
|
|
partsize_base = 1024
|
||
|
|
partsize_raw = partsize_raw.removesuffix("k").removesuffix("k")
|
||
|
|
else:
|
||
|
|
partsize_base = 1
|
||
|
|
partsize = partsize_base * int(partsize_raw)
|
||
|
|
|
||
|
|
with open(infile, "rb") as f:
|
||
|
|
readf = f.read()
|
||
|
|
|
||
|
|
size = len(readf)
|
||
|
|
if len(readf) % partsize != 0:
|
||
|
|
print("Warning: size % partsize != 0")
|
||
|
|
|
||
|
|
unit = "B"
|
||
|
|
if size % 1024 == 0: size //= 1024; unit = "kB"
|
||
|
|
if size % 1024 == 0: size //= 1024; unit = "mB"
|
||
|
|
|
||
|
|
print("Size: %d %s, creating %d chunks" % (size, unit, len(readf) / partsize))
|
||
|
|
|
||
|
|
try:
|
||
|
|
os.mkdir(os.path.dirname(outfile))
|
||
|
|
except FileExistsError:
|
||
|
|
pass
|
||
|
|
|
||
|
|
for i in range(0, len(readf), partsize):
|
||
|
|
part_name = outfile % (i, i + partsize)
|
||
|
|
with open(part_name, "wb") as f:
|
||
|
|
chunk = readf[i:i + partsize]
|
||
|
|
f.write(chunk)
|
||
|
|
if len(chunk) < partsize:
|
||
|
|
# last chunk
|
||
|
|
f.write(bytes(partsize - len(chunk)))
|
||
|
|
if zstd: subprocess.run(["zstd", "-19", "-f", "--rm", part_name], check=True)
|
||
|
|
elif gzip: subprocess.run(["gzip", "-9", "-f", part_name], check=True)
|