zip - فشرده‌سازی یا تهیه بایگانی از فایل‌ها و فولدرها

با استفاده از دستور zip می‌تونیم فایل‌ها و فولدرهامون رو فشرده کنیم و یا ازشون یک آرشیو بسازیم. zip در واقع پسوند فایل‌های فشرده‌ای هست که به‌طور گسترده در همه سیستم‌ عامل‌های دنیا (مثل ویندوز، مک، لینوکس، سیمبیان، اندروید و ...) پشتیبانی می‌شه.

روش کلی استفاده از دستور zip به شرح زیر است:

$ zip [options] [archive] [files]

options: پارامترهای قابل استفاده.

archive: اسم فایل زیپ که قراره ایجاد بشه.

files: فایل(ها) و پوشه (ها) که تصمیم داریم فشرده‌اش کنیم.

تفاوت فشرده‌سازی با آرشیو کردن

آرشیو کردن به این معنی است یک تعداد فایل رو بدون این‌که حجمشون تغییر کنه در یک مکان جمع‌آوری می‌کنیم، مثلا حاصل جمع‌آوری ۲۰ فایل ۱۰۰ کیلوبایتی، یک فایل ۲۰۰۰ کیلوبایتی هست. ولی فشرده‌سازی علاوه بر آرشیو کردن، بسته به فایل اصلی باعث کم شدن مقداری از حجم فایل‌ آرشیو می‌شه.

فشرده‌سازی یک فایل

matrix@matrix-desktop:~/Pictures$ ls --group-directories-first -lh
total 752K
drwx------ 2 matrix matrix  36K Feb 11 18:49 Attractive
drwx------ 6 matrix matrix 4.0K Feb 11 18:51 Face
drwxrwxr-x 4 matrix matrix 4.0K Feb  2 02:15 Icon
drwxrwxr-x 3 matrix matrix 4.0K Feb 15 22:47 Other
drwxrwxr-x 2 matrix matrix 4.0K Feb 15 23:03 svg
drwxrwxr-x 2 matrix matrix 148K Feb 14 20:30 Wallpaper
-rw------- 1 matrix matrix  46K Nov 14  2011 amarok.svg
-rw------- 1 matrix matrix  23K Nov 14  2011 chromium.svg
-rw------- 1 matrix matrix  22K Nov 14  2011 facebook.svg
-rw------- 1 matrix matrix 240K Nov 14  2011 gimp.svg
-rw------- 1 matrix matrix  46K Nov 14  2011 gnome-status.svg
-rw------- 1 matrix matrix  77K Nov 14  2011 gnomine.svg
-rw------- 1 matrix matrix  81K Nov 14  2011 wallpaper.svg
matrix@matrix-desktop:~/Pictures$ zip gimp.zip gimp.svg
  adding: gimp.svg (deflated 61%)

مثال بالا یک فایل زیپ با نام gimp.zip ساخته و فایل gimp.svg رو بهش اضافه می‌کنه. همون‌طور که می‌بینید حجم فایل فشرده شده ۶۱ درصد کمتر از فایل اصلی هست.

فشرده‌سازی چند فایل

برای فشرده‌سازی چند فایل کافیه با یک فاصله اون‌ها رو از هم جدا کنیم‌، همین‌طور می‌تونیم از wildcardها استفاده کنیم:

matrix@matrix-desktop:~/Pictures$ zip svg.zip *.svg
  adding: amarok.svg (deflated 72%)
  adding: chromium.svg (deflated 76%)
  adding: facebook.svg (deflated 72%)
  adding: gimp.svg (deflated 61%)
  adding: gnome-status.svg (deflated 72%)
  adding: gnomine.svg (deflated 81%)
  adding: wallpaper.svg (deflated 76%)

مثال بالا یک فایل زیپ با عنوان svg.zip ساخته و تمام فایل‌هایی که پسوندشون svg هست رو بهش اضافه می‌کنه. مقدار فشرده‌سازی هم جلوی اسم هر فایل نوشته.

فشرده‌سازی پوشه‌ها با استفاده از پارامتر r-

برای فشرده کردن یک پوشه کافیه اسم اون پوشه رو بنویسین:

matrix@matrix-desktop:~/Pictures$ zip -r folder.zip svg
  adding: svg/ (stored 0%)
  adding: svg/gnome-status.svg (deflated 72%)
  adding: svg/facebook.svg (deflated 72%)
  adding: svg/amarok.svg (deflated 72%)
  adding: svg/gimp.svg (deflated 61%)
  adding: svg/gimp.zip (stored 0%)
  adding: svg/wallpaper.svg (deflated 76%)
  adding: svg/chromium.svg (deflated 76%)
  adding: svg/gnomine.svg (deflated 81%)

تعیین میزان فشرده‌سازی با استفاده از عددهای ۰ الی ۹

برای این‌که مشخص کنیم فایل مورد نظر تا چه حدی فشرده بشه می‌تونیم از عددهای ۰ الی ۹ استفاده کنیم، عدد ۰ باعث می‌شه فایل خروجی اصلا فشرده نشه و فقط آرشیو تهیه می‌کنه و عدد ۹ بیشترین میزان فشرده‌سازی رو اعمال می‌کنه.

matrix@matrix-desktop:~/Pictures$ zip -0 fb.zip facebook.svg
  adding: facebook.svg (stored 0%)
matrix@matrix-desktop:~/Pictures$ zip -9 fb.zip facebook.svg
updating: facebook.svg (deflated 72%)

نکته: اگر توجه کنید دستور اول فایل fb.zip رو ایجاد کرد و facebook.svg رو بهش اضافه کرد، وقتی دستور دوم رو زدیم فایل facebook.svg داخل fb.zip به‌روز شد و میزان فشرده‌سازیش تغییر کرد، پس دستور zip فایل رو رونوشت نمی‌کنه بلکه به‌روز می‌کنه. همین‌طور اگر یک با یک دستور دیگه، یک فایل دیگه هم به fb.zip نسبت بدیم، محتوای فعلی رو نگه می‌داره و فایل جدید رو به آرشیو اضافه می‌کنه.

رمزنگاری بر روی آرشیوها

هرچند الگوریتم استفاده شده در فایل‌های zip از پیچیدگی چندانی برخوردار نیست و با یک جستجوی ساده در وب ابزارهای فراوانی جهت رمزگشایی فایل‌های زیپ می‌یابیم، به دو صورت می‌توان بر روی فایل‌های فشرده گذرواژه تعیین کرد:

۱. استفاده از پارامتر P-

matrix@matrix-desktop:~/Pictures$ zip -P 30li gm.zip gnomine.svg
  adding: gnomine.svg (deflated 81%)

در مثال بالا یک فایل زیپ داریم با گذرواژه 30li.

اخطار: سعی کنید برای رمزگذاری بر روی آرشیوها از پارامتر P-استفاده نکنید چرا که مستقیما داخل دستور تایپ می‌شه و هر کسی با مرور تاریخچه شل مورد استفادتون می‌تونه به گذرواژه پی ببره!

۲. استفاده از پارامتر e-

matrix@matrix-desktop:~/Pictures$ zip -e gs.zip gnome-status.svg
Enter password:
Verify password:
  adding: gnome-status.svg (deflated 72%)

حالا یک فایل gs.zip رمزنگاری شده داریم و کسی هم نمی‌فهمه رمزش چیه! :)