Links

ডাটা আর্কাইভিং

কম্প্রেসিং এর সাথে আরো একটি গুরুত্বপূর্ণ কাজ হল আর্কাইভিং (archiving) করা। এর মাধ্যমে অনেক ফাইল মিলে একটি বড় ফাইল তৈরী করা হয়। সিস্টেম ব্যাকাপে এটি বহুল ব্যবহৃত একটি উপায়। এবার আমরা দুটি আর্কাইভিং টুলস সম্পর্কে জানবো:

tar

tar ইউনিক্সসদৃশ্য সিস্টেমের জগতে একটি ঐতিহ্যবাহী আর্কাইভিং টুল। এর পুরো নাম, tape archive। অর্থাৎ যখন ম্যাগনেটিক টেপে ব্যাকআপ রাখা হত তখন এর উৎপত্তি। এখনো এটি কার্যকর পদ্ধতি। আমরা তাই প্রায়ই .tar, .tgz বা .tar.gz এক্সটেনশনের ফাইল দেখি। প্রথমটি সাধারণ আর্কাইভ আর বাকি দুটি কম্প্রেসড আর্কাইভ।
tar কমান্ডের কাঠামোটি একটু অন্যরকম:
tar [-]mode[options] pathname...
এখানে মোড বলে একটা অপশন দিতে হয় এবং তারসাথে অন্য অপশন জুড়ে থাকে। এবং অপশনগুলোর সামনে '-' চিহ্ন না দিলেও হয়। এবার আমরা গুরুত্বপূর্ণ মোডগুলো দেখি:
মোড
কাজ
c
নতুন আর্কাইভ তৈরী করে।
x
আর্কাইভ এক্সট্রাক্ট করে।
r
একটি আর্কাইভে আরো ফাইল যোগ করে।
t
আর্কাইভের ফাইল ও ডিরেক্টরির লিস্ট করে।
এবার আর্কাইভিং করতে আমরা কিছু ফাইল ও ডিরেক্টরি তৈরী করি:
[email protected]:~$ mkdir -p playground/dir-{001..100}
[email protected]:~$ touch playground/dir-{001..100}/file-{A..Z}
এবার আমরা playground ডিরেক্টরির সব কন্টেন্টসহ playground.tar নামে একটি আর্কাইভ তৈরী করবো এভাবে:
[email protected]:~$ tar -cf playground.tar playground
আমরা চাইলে -cf কে cf ও লিখতে পারতাম। 'f' অপশন দিয়ে আমরা ফাইলনেম দিয়েছি।
আবার আমরা চাইলে নির্দিষ্ট কিছু ফাইল find দিয়ে খুঁজে বের করে আর্কাইভ করতে পারতাম এভাবে:
[email protected]:~$ find playground -name 'file-A' -exec tar -rf playground.tar '{}' '+'
এখানে আমরা 'file-A' নামের সকল ফাইল নিয়ে আর্কাইভ করেছি।
আমরা .tgz যুক্ত gzip কম্প্রেসড আর্কাইভ ও .tbz যুক্ত bzip2 কম্প্রেসড আর্কাইভ তৈরী করতে পারি এভাবে:
[email protected]:~$ tar -czf playground.tgz playground
[email protected]:~$ tar -cjf playground.tbz playground
এখানে 'z' ও 'j' অপশন যথাক্রমে gzipbzip2 নির্দেশ করে। সেই অনুসারে আমরা আর্কাইভটিরও নাম বদলেছি।
এবার আমরা যদি চাই সকল file-A নামের ফাইল দিয়ে একটি bzip2 কম্প্রেসড আর্কাইভ করবো তবে লিখতে পারি:
[email protected]:~$ find playground -name 'file-A' | tar -cjf playground.tbz -T -
এখানে দুটি বিষয় লক্ষ্যণীয়। প্রথমত আমরা find কমান্ডের ফলাফল পাইপ দিয়ে tar এ প্রবাহিত করেছি। দ্বিতীয়ত, tar কমান্ডের শেষৈ -T - ব্যবহার করেছি। - দিয়ে স্ট্যান্ডার্ড ইনপুট ও আউটপুট দুটোই বোঝানো যায় প্রয়োজনমত। এখানে -T অপশন দিয়ে আমরা বলেছি কমান্ড থেকে সরাসরি ফাইলের নাম না নিয়ে স্ট্যান্ডার্ড ইনপুট থেকে নিতে। স্ট্যান্ডার্ড ইনপুট বোঝাতে - এবং স্ট্যান্ডার্ড ইনপুটে আমরা find কমান্ড চালিত করেছিলাম। অর্থাৎ এটি ইনপুট নেবে find কমান্ড থেকে।
আমরা playground.tar আর্কাইভটির ফাইললিস্ট দেখতে পারি এভাবে:
[email protected]:~$ tar -tf playground.tar
playground/
playground/dir-051/
playground/dir-051/file-B
playground/dir-051/file-E
playground/dir-051/file-I
playground/dir-051/file-H
playground/dir-051/file-W
...
আরো বিস্তারিত দেখতে পারি এভাবে:
[email protected]:~$ tar -tvf playground.tar
drwxrwxr-x me/me 0 2015-04-03 15:39 playground/
drwxrwxr-x me/me 0 2015-04-03 14:52 playground/dir-051/
-rw-rw-r-- me/me 0 2015-04-03 15:44 playground/dir-051/file-B
-rw-rw-r-- me/me 0 2015-04-03 14:52 playground/dir-051/file-E
-rw-rw-r-- me/me 0 2015-04-03 14:52 playground/dir-051/file-I
-rw-rw-r-- me/me 0 2015-04-03 14:52 playground/dir-051/file-H
-rw-rw-r-- me/me 0 2015-04-03 14:52 playground/dir-051/file-W
...
আমরা এবার নতুন একটি ডিরেক্টরিতে playground.tar এক্সট্রাক্ট করবো:
[email protected]:~$ mkdir extracted-pg
[email protected]:~$ cd extracted-pg
[email protected]:~$ tar -xf ../playground.tar
playground/
আমরা extracted-pg নামে একটি ডিরেক্টরি তৈরী করেছি এবং তার মধ্যে এক্সট্রাক্ট করেছি।
আমরা চাইলে সমস্ত আর্কাইভ এক্সট্রাক্ট না করে নির্দিষ্ট এক বা একাধিক ফাইল এক্সট্রাক্ট করতে পারতাম। যেমন আমরা যদি সব file-A নামের ফাইলগুলো এক্সট্রাক্ট করতে চাই সেটা করতে পারি এভাবে:
[email protected]:~$ tar -xf ../playground.tar --wildcards 'home/me/playground/dir-*/file-A'
এখানে যেন আমরা পাথনমে ওয়াইল্ডকার্ড ব্যবহার করতে পারি এজন্য --wildcards অপশনটি ব্যবহার করেছি। এবং শেষে ওয়াইল্ডকার্ড এর মাধ্যমে সকল 'file-A' নামের ফাইলগুলো সিলেক্ট করেছি।

zip ও unzip

zip একই সাথে কম্প্রেস ও আর্কাইভ দুটোই করে। আমরা আমাদের playground ফোল্ডারটি সব কন্টেন্টসহ zip করতে চাইলে লিখতে পারি:
[email protected]:~$ zip -r playground.zip playground
-r অপশন দিয়ে রিকার্সিভ বোঝানো হয়েছে।
unzip করতে আমরা লিখতে পারি:
[email protected]:~$ unzip playground.zip