এখানে আরও একটি সমাধান দেওয়া হল। এটি আপনাকে সংরক্ষণাগার থেকে পৃথক ফাইলগুলি বের করতে এবং এর আকার হ্রাস করতে দেবে না, তবে আপনি যাওয়ার সাথে সাথে সংরক্ষণাগারটির আকার হ্রাস করে সমস্ত ফাইল বের করতে দেয়:
#!/bin/sh
# $1, the first paramter, is the .tar.gz file to unarchive
(
size=$(wc -c $1)
offset=0
bs=4096
while [[ $size > $offset ]]; do
dd if=$1 bs=$bs count=1 skip=$offset status=none
fallocate -p -o $offset -l $bs $1
offset=$(( $offset + $bs ))
done
) | tar xz
উদাহরণস্বরূপ একটি ফাইলে এটি সংরক্ষণ করুন এবং এই untar_and_destroy.sh
হিসাবে চালিত করুন:
untar_and_destroy.sh whatever.tar.gz
এটি যা করে তা হ'ল .tar.gz
ফাইলটির একটি অংশকে টার্ন দেওয়া, লিনাক্সকে ফাইলের সেই অংশটি কমিয়ে আনতে বলা এবং তারপরে পরবর্তী অংশের জন্য পুনরাবৃত্তি করা। আপনি যখন কাজটি সম্পন্ন করবেন, ls -l
তখন .tar.gz
ফাইলগুলি আগের মতোই আকারের বলে du
দেবে , তবে তার আকারটি 0 হিসাবে প্রতিবেদন করবে This এটি কারণ .tar.gz
একটি বিচ্ছুরিত ফাইল তৈরি করা হয়েছে, আগের দৈর্ঘ্যের সাথে তবে সমস্ত 0 এর মতো নয় যা ডিস্কে সংরক্ষণ করা প্রয়োজন।
এটি উত্পাদনে ব্যবহার করবেন না বা যেখানেই সংরক্ষণাগারটি মুছে ফেলা খারাপ হবে। এটি সংরক্ষণাগারটি শুরু হওয়ার সাথে সাথেই অপঠনযোগ্য করে তোলে, তাই যদি কোনওরকম ভুল হয়ে যায়, যেমন আপনি বের করার সময় হার্ড ডিস্কের জায়গার বাইরে চলে যান তবে আপনি এটি চালানোর দ্বিতীয় সুযোগ পাবেন না।