Скрипт: запаковывает в tar, сжимает xz, делит посредством split
Файл "Compress-TAR-XZ-Split.py"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
import sys
import getopt
import math
import os
#-------------------------------------------------------------------------------
# Опции и аргументы скрипта при вызове
Opts, ExtraParams = getopt.getopt(sys.argv[1:], "ho:v", ["PartSize=", "PartPower="])
# PartSize - размер частей на которые будет разбиваться архив
# или можно указать PartPower которая определяет PartSize = 2^PartPower
#-------------------------------------------------------------------------------
FName = ExtraParams[0] # имя файла = первый (нулевой) аргумент
FSize = os.stat(FName).st_size # получение размера этого файла
PartSize = 2**32 # размер частей на которые будет разбиваться архив - значение по умолчанию
for o,p in Opts:
if o in ["--PartSize"]:
PartSize = int(p)
if o in ["--PartPower"]:
PartSize = 2**int(p)
# Количество разрядов (десятичных) для хранения суфиксов в имени разделенного на части архива файла - например, 3 - "File.tar.001"
PartCnt = int(-(math.floor(-math.log(float(FSize)/float(PartSize), 10)))) # отсечение дробной части в большую сторону
if PartCnt <= 0: # должно быть не меньше 1
PartCnt = 1
#-------------------------------------------------------------------------------
print("File name:\t" + FName)
print("Part size:\t" + str(PartSize))
#-------------------------------------------------------------------------------
# Команда ОС
os.system("tar -cvpf - \"%s\" | xz -cvzfe9 | split --bytes=%i -da%i - \"%s.tar.xz.Part\""%(FName, PartSize, PartCnt, FName))
#-------------------------------------------------------------------------------
Вызов, например, для сжатия файла "1.jpg"
./Compress-TAR-XZ-Split.py --PartPower=20 1.jpg
Но пока есть проблемы:
1) нету распаковщика
2) только поверхностно протестирован
3) типы файлов почему-то какие-то "левые" получаются
Есть идеи?