সহজ উপায়টি ছাড় করবেন না: এটি আপনার প্রয়োজনের জন্য দ্রুত পর্যাপ্ত হতে পারে। ডিরেক্টরি হিসাবে সংরক্ষণাগারটি অ্যাক্সেস করতে অ্যাফএফ সহ :
cd ~/.avfs/path/to/original.tar.gz\#
pax -w -s '/^.*\.jpg$//' | gzip >/path/to/filtered.tar.gz # POSIX
tar -czf /path/to/filtered.tar.gz -s '/^.*\.jpg$//' . # BSD
tar -czf /path/to/filtered.tar.gz --transform '/^.*\.jpg$//' . # GNU
আরও আদিম সরঞ্জামের সাহায্যে প্রথমে ফাইলগুলি বাদ দিয়ে .jpg
ফাইলগুলি বের করুন , তারপরে একটি নতুন সংরক্ষণাগার তৈরি করুন।
mkdir tmpdir && cd tmpdir
<original.tar.gz gzip -d | pax -r -pe -s '/^.*\.jpg$//'
pax -w . | gzip >filtered.tar.gz
cd .. && rm -rf tmpdir
যদি আপনার টারে থাকে --exclude
:
mkdir tmpdir && cd tmpdir
tar -xzf original.tar.gz --exclude='*.jpg'
tar -czf filtered.tar.gz .
cd .. && rm -rf tmpdir
আপনি যদি এটি রুট হিসাবে চালনা না করেন তবে এটি মঙ্গলে ফাইলের মালিকানা এবং মোডগুলি হতে পারে। সেরা ফলাফলের জন্য, দ্রুত ফাইল সিস্টেমের একটি অস্থায়ী ডিরেক্টরি ব্যবহার করুন - tmpfs যদি আপনার কাছে যথেষ্ট পরিমাণে বড় থাকে।
পাসওয়ার্ড হিসাবে কাজ করার জন্য সংরক্ষণাগারগুলির জন্য সমর্থন (যেমন একটি সংরক্ষণাগারটি পড়ুন এবং একটি সংরক্ষণাগার লিখুন) সীমাবদ্ধ থাকে। গনুহ আলকাতরা একটি সংরক্ষণাগার থেকে সদস্যদের মুছে দিতে পারেন সঙ্গে --delete
অপারেশন বিকল্প ( " --delete
বিকল্প সঠিকভাবে কাজ করার জন্য রিপোর্ট করা হয়েছে যখন tar
থেকে একটি ফিল্টারও হিসাবে কাজ করে stdin
যাও stdout
।"), এবং যে সম্ভবত আপনার সবচেয়ে ভাল বিকল্প নেই।
আপনি পাইথনের কয়েকটি লাইনে শক্তিশালী সংরক্ষণাগার ফিল্টার তৈরি করতে পারেন। এর tarfile
গ্রন্থাগারটি অ-সন্ধানযোগ্য স্ট্রিমগুলি থেকে পড়তে বা লিখতে পারে এবং আপনি পাইথনে নির্বিচার কোড ব্যবহার করতে পারেন ফিল্টার, নামকরণ, পরিবর্তন করতে ...
#!/usr/bin/python
import re, sys, tarfile
source = tarfile.open(fileobj=sys.stdin, mode='r|*')
dest = tarfile.open(fileobj=sys.stdout, mode='w|gz')
for member in source:
if not (member.isreg() and re.match(r'.*\.jpg\Z', member.name)):
sys.stderr.write(member.name + '\n')
dest.addfile(member, source.extractfile(member))
dest.close()