সম্পূর্ণ প্যাচওয়ার্ক এবং একটি দ্রুত, রুক্ষ স্কেচ যেমনটি রয়েছে তবে 3000 ফাইলের সাহায্যে ডিরেক্টরিতে এটি পরীক্ষা করা হয়েছে, নীচের স্ক্রিপ্টটি অত্যন্ত দ্রুত কাজ করেছে:
#!/usr/bin/env python3
import subprocess
import os
import sys
splitinto = 2
dr = sys.argv[1]
os.chdir(dr)
files = os.listdir(dr)
n_files = len(files)
size = n_files // splitinto
def compress(tar, files):
command = ["tar", "-zcvf", "tarfile" + str(tar) + ".tar.gz", "-T", "-", "--null"]
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
with proc:
proc.stdin.write(b'\0'.join(map(str.encode, files)))
proc.stdin.write(b'\0')
if proc.returncode:
sys.exit(proc.returncode)
sub = []; tar = 1
for f in files:
sub.append(f)
if len(sub) == size:
compress(tar, sub)
sub = []; tar += 1
if sub:
# taking care of left
compress(tar, sub)
কিভাবে ব্যবহার করে
সংখ্যাযুক্ত .tar.gz
ফাইলগুলি যেখানে ফাইল রয়েছে সেই একই ডিরেক্টরিতে তৈরি করা হবে।
ব্যাখ্যা
এই পান্ডুলিপি:
- ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করে
- টার ফাইলটিতে পথের তথ্য যোগ করা রোধ করতে ডিরেক্টরিতে সিডি
- ফাইল তালিকার মাধ্যমে সেট বিভাগ দ্বারা তাদেরকে গ্রুপবদ্ধ করে পড়া হয়
- সাব গ্রুপ (গুলি) কে সংখ্যাযুক্ত ফাইলগুলিতে সংকুচিত করে
সম্পাদনা
এমবি আকারে স্বয়ংক্রিয়ভাবে খণ্ডগুলি তৈরি করুন
আরও পরিশীলিত হ'ল অংশগুলির সর্বোচ্চ আকার (এমবিতে) একটি (দ্বিতীয়) যুক্তি হিসাবে ব্যবহার করা। নীচের স্ক্রিপ্টে, অংশগুলি একটি সংকুচিত ফাইলে লেখা হবে যতক্ষণ না খণ্ডটি দ্বার প্রান্তে পৌঁছে যাবে।
যেহেতু স্ক্রিপ্টটি খণ্ডগুলি দ্বারা ট্রিগার করা হয়েছে, প্রান্তিক ছাড়িয়েছে, এটি তখনই কাজ করবে যদি (সমস্ত) ফাইলের আকার খণ্ড আকারের চেয়ে যথেষ্ট ছোট হয়।
এই পান্ডুলিপি:
#!/usr/bin/env python3
import subprocess
import os
import sys
dr = sys.argv[1]
chunksize = float(sys.argv[2])
os.chdir(dr)
files = os.listdir(dr)
n_files = len(files)
def compress(tar, files):
command = ["tar", "-zcvf", "tarfile" + str(tar) + ".tar.gz", "-T", "-", "--null"]
proc = subprocess.Popen(command, stdin=subprocess.PIPE)
with proc:
proc.stdin.write(b'\0'.join(map(str.encode, files)))
proc.stdin.write(b'\0')
if proc.returncode:
sys.exit(proc.returncode)
sub = []; tar = 1; subsize = 0
for f in files:
sub.append(f)
subsize = subsize + (os.path.getsize(f)/1000000)
if subsize >= chunksize:
compress(tar, sub)
sub = []; tar += 1; subsize = 0
if sub:
# taking care of left
compress(tar, sub)
চালানোর জন্য:
python3 /path/tocompress_split.py /directory/with/files/tocompress chunksize
... যেখানে চুনসাইজ হ'ল টার কমান্ডের ইনপুট আকার ।
এটির মধ্যে @ ডেভিডফোস্টার দ্বারা প্রস্তাবিত উন্নতিগুলি অন্তর্ভুক্ত করা হয়েছে। অনেক অনেক ধন্যবাদ !
tar
সবগুলি না হওয়া পর্যন্ত আপনি সম্ভবত নির্দিষ্ট প্যাটার্ন দিয়ে শুরু করা সমস্ত ফাইল যুক্ত করে এগুলি করতে পারেন। এটি সহজে স্ক্রিপ্ট করা যেতে পারে তবে আপনার প্রয়োজন মতো আকারটি 9MB এর চেয়ে কম হবে এর গ্যারান্টি দেয় না। তবে, আপনি ম্যানুয়ালি সেই ফাইলগুলির আকারকে আরও বিভক্ত করে আকারে সামঞ্জস্য করতে পারেন।