زیپ و آنزیپ کردن فایل ها با ترمینال لینوکس — از صفر تا صد

۳۵۰۰ بازدید
آخرین به‌روزرسانی: ۲۹ شهریور ۱۴۰۲
زمان مطالعه: ۸ دقیقه
زیپ و آنزیپ کردن فایل ها با ترمینال لینوکس — از صفر تا صد

فایل‌های زیپ (ZIP) یک آرشیو جهانی هستند که به طور گسترده‌ای روی سیستم‌های ویندوز، macOS و حتی لینوکس استفاده می‌شوند. شما می‌توانید با استفاده از برخی دستورهای ترمینال لینوکس اقدام به زیپ و آنزیپ کردن فایل ها بکنید. در این راهنما نیز به همین مسئله یعنی نحوه زیپ و آنزیپ کردن فایل‌ها با ترمینال لینوکس خواهیم پرداخت.

قالب آرشیو فشرده ZIP

به لطف سلطه قالب Zip در اقلیم ویندوز، فایل‌های ZIP احتمالاً رایج‌ترین شکل از آرشیو فشرده در دنیا هستند. با این که فایل‌های tar.gz. و tar.bz2 نیز در لینوکس رایج هستند، اما کاربران ویندوز احتمالاً فایل‌های فشرده خود را به صورت Zip برای شما ارسال می‌کنند. اگر می‌خواهید برخی فایل‌ها را فشرده‌سازی کرده و برای کاربران ویندوز ارسال کنید، قالب Zip ساده‌ترین و تطبیق‌پذیرترین گزینه برای همه افراد خواهد بود.

زیپ، آنزیپ و دیگر ابزارهای کاربردی

احتمالاً می‌دانید که لینوکس و سیستم‌های عامل شِبه Unix مانند macOS ابزارهایی دارند که امکان ایجاد فایل‌های Zip و استخراج فایل‌ها از آن‌ها را فراهم می‌کنند. این ابزارها به ترتیب زیپ (zip) و آنزیپ (unzip) نام دارند. البته یک خانواده کامل از ابزارهای مرتبط مانند zipcloak ،zipdetails ،zipsplit و zipinfo نیز وجود دارند.

ما برخی توزیع‌های لینوکس را بررسی کردیم تا ببینیم آیا همه آن‌ها شامل این ابزارها در نسخه نصبی استاندارد هستند یا نه. همه این ابزارها در اوبونتو 19.04، 18.10 و 18.04 وجود داشتند. همچنین در توزیع Manjaro 18.04 نیز ابزارهای یاد شده حاضر بودند. توزیع Fedora 29 شامل ابزارهای zip و unzip است، اما هیچ کدام از ابزارهای دیگر را شامل نمی‌شود. این حالت در مورد توزیع CentOS نیز صدق می‌کند.

برای نصب ابزارهای مفقود روی Fedora 29 از دستور زیر استفاده کنید:

sudo dnf install perl-IO-Compress

Zip یا Unzip کردن فایل

برای نصب اجزای مفقود روی CentOS 7 از دستور زیر استفاده کنید:

sudo yum install perl-IO-Compress

Zip یا Unzip کردن فایل‌ها

اگر هر کدام از ابزارهای Zip در یک توزیع لینوکس که در بخش قبل اشاره شد، وجود نداشته باشند می‌توانید از ابزارهای مدیریت پکیج‌های آن توزیع برای نصب بسته و ابزار مورد نیاز خود استفاده کنید.

ایجاد فایل زیپ با دستور zip

برای ایجاد یک فایل ZIP باید به دستور zip اعلام کنیم که نام فایل آرشیو چیست و کدام فایل‌ها باید در آن قرار بگیرند. لزومی وجود ندارد که پسوند zip. را برای نام آرشیو ذکر کنید، اما انجام چنین کاری نیز لطمه‌ای وارد نمی‌کند.

برای ایجاد فایلی به نام source_code.zip که شامل همه فایل‌های کد منبع C و فایل‌های هدر در دایرکتوری جاری باشد باید از دستور زیر استفاده کنید:

zip source_code *.c *.h

Zip یا Unzip کردن فایل‌ها

هر فایل زمانی که اضافه شود، فهرست‌بندی خواهد شد. نام فایل و مقدار فشرده‌سازی انجام یافته برای آن فایل نیز نمایش داده می‌شود.

Zip یا Unzip کردن فایل‌ها

اگر به آرشیو ZIP جدید نگاه کنید، می‌بینید که پسوند فایل zip. به صورت خودکار از سوی ابزار zip اضافه شده است:

ls -l source_code.zip

Zip یا Unzip کردن فایل‌ها

اگر خروجی ابزار zip را در زمان ایجاد فایل ZIP مشاهده نمی‌کنید، از گزینه q- استفاده کنید:

zip -q source_code *.c *.h

Zip یا Unzip کردن فایل‌ها

گنجاندن دایرکتوری‌ها در فایل‌های ZIP

برای گنجاندن دایرکتوری‌های فرعی در فایل ZIP باید از گزینه r- به معنی «بازگشتی» (recursive) استفاده کنید و نام دایرکتوری فرعی را در خط فرمان ذکر کنید. برای ایجاد یک فایل ZIP مانند قبل و گنجاندن دایرکتوری فرعی از این دستور استفاده کنید:

zip -r -q source_code archive/ *.c *.h

Zip یا Unzip کردن فایل‌ها

برای این که وقتی افراد می‌خواهند فایل‌های فشرده شما را از آرشیو استخراج کنند، با مشکل مواجه نشوند و در زمان استخراج همه فایل‌ها روی سیستم در یک دایرکتوری به صورت منظم قرار گیرند، بهتر است فایل‌هایی را که می‌خواهیم آرشیو کنیم، همواره درون یک دایرکتوری قرار دهیم.

در دستور زیر قصد داریم دایرکتوری work و همه دایرکتوری‌های فرعی آن را آرشیو کنیم. توجه داشته باشید که این دستور از دایرکتوری والد پوشه work صادر می‌شود.

zip -r -q source_code work/

Zip یا Unzip کردن فایل‌ها

تنظیم سطح فشرده‌سازی

شما می‌توانید میزان فشرده‌سازی اعمال شده روی فایل‌ها را نیز در زمان افزودن آن‌ها به آرشیو ZIP تعیین کنید. بازه قابل تعریف از 0 تا 9 است. 0 به معنی عدم فشرده‌سازی است، هر چه این عدد بالاتر برود، میزان فشرده‌سازی افزایش یافته و به طور طبیعی زمان مورد نیز برای انجام این کار نیز افزایش می‌یابد. برای فایل‌های ZIP با اندازه متوسط این تفاوت زمانی چندان قابل توجه نخواهد بود. بدین ترتیب در مورد اغلب فایل‌ها، سطح فشرده‌سازی پیش‌فرض (سطح 6) احتمالاً به قدر کافی مناسب خواهد بود.

برای اینکه ابزار zip از یک سطح خاصی از فشرده‌سازی استفاده کند، باید یک عدد به همراه (-) به صورت زیر به عنوان گزینه به خط فرمان ارسال کنید:

zip -0 -r -q source_code work/

Zip یا Unzip کردن فایل‌ها

سطح فشرده‌سازی پیش‌فرض 6 است. بنابراین نیازی به ذکر عدد -6 نیست، اما اگر چنین کاری را هم انجام بدهید، ایرادی وارد نخواهد کرد.

zip -r -q source_code work/

Zip یا Unzip کردن فایل‌ها

سطح بیشینه فشرده‌سازی برابر با سطح 9 است.

zip -9 -r -q source_code work/

Zip یا Unzip کردن فایل‌ها

با احتساب فایل‌ها و دایرکتوری‌های منتخبی که ما آرشیو کردیم، تفاوت بین عدم فشرده‌سازی (سطح 0) و فشرده‌سازی پیش‌فرض (سطح 6)، به مقدار 400 کیلوبایت بوده است. تفاوت بین فشرده‌سازی سطح 6 و بالاترین سطح یعنی 9 نیز صرفاً برابر با 4 کیلوبایت بوده است.

شاید این مقدار به نظر شما زیاد نباشد؛ اما برای آرشیوهایی که شامل صدها یا حتی هزاران فایل هستند، مقدار کمی فشرده‌سازی بیشتر برای هر فایل موجب صرفه‌جویی زیادی در فضا خواهد شد.

افزودن رمز عبور به فایل‌های زیپ

افزودن رمز عبور به فایل‌های ZIP کار آسانی است. کافی است از گزینه e– استفاده کنید که اختصاری برای عبارت «encrypt» (رمزگذاری) است. بدین ترتیب از شما یک رمز عبور پرسیده می‌شود و در ادامه باید آن را مجدداً وارد کنید تا تأیید شود.

zip -e -r -q source_code work/

Zip یا Unzip کردن فایل‌ها

آنزیپ کردن با دستور unzip

برای استخراج فایل‌ها از یک فایل ZIP باید از دستور unzip استفاده کنیم و نام فایل ZIP را مورد اشاره قرار دهیم. توجه کنید که باید پسوند zip. را نیز ذکر کنید.

unzip source_code.zip

Zip یا Unzip کردن فایل‌ها

زمانی که فایل‌ها استخراج شدند، در پنجره ترمینال فهرست‌بندی می‌شوند:

Zip یا Unzip کردن فایل‌ها

فایل‌های ZIP شامل جزییات مالکیت فایل‌ها نیستند. همه این فایل‌هایی که استخراج می‌شوند دارای مالکیتی هستند که برای فرد استخراج‌کننده تنظیم شده است.

دستور unzip نیز مانند دستور zip یک گزینه q- دارد، که زمانی استفاده می‌شود که نیازی به دیدن فهرست‌بندی فایل‌های استخراج شده نداشته باشید.

unzip -q source_code.zip

Zip یا Unzip کردن فایل‌ها

استخراج فایل‌ها به یک دایرکتوری هدف

برای این که فایل‌ها در یک دایرکتوری مشخص استخراج شوند، از گزینه d– استفاده کنید که اختصاری برای عبارت «دایرکتوری» (directory) است. با ذکر این گزینه باید مسیر آن دایرکتوری را که می‌خواهید آرشیو در آن استخراج شود را نیز معین کنید.

unzip -q source_code.zip -d./development

Zip یا Unzip کردن فایل‌ها

استخراج فایل‌های زیپ که با رمز عبور محافظت می‌شوند

اگر یک فایل ZIP با یک رمز عبور ایجاد شده باشد، ابزار unzip از شما می‌خواهد که رمز عبور آن را وارد کنید. اگر رمز عبور صحیحی وارد نکنید، ابزار unzip فایل‌ها را استخراج نخواهد کرد.

unzip -q source_code.zip

Zip یا Unzip کردن فایل‌ها

اگر برایتان مهم نیست که رمزهای عبور شما از سوی دیگران دیده شود، یا در سابقه دستورها نگهداری شود می‌توانید رمز عبور را در خط فرمان با استفاده از گزینه P- ذکر کنید. در این مورد به بزرگ بودن حرف P دقت کنید.

unzip -P fifty.treacle.cutlass -q source_code.zip

Zip یا Unzip کردن فایل‌ها

استثنا کردن برخی فایل‌ها

اگر نمی‌خواهید یک فایل خاص یا گروهی از فایل‌ها را استخراج کنید، از گزینه x- استفاده کنید که اختصاری برای عبارت «استخراج» (exctract) است. در این مثال ما می‌خواهیم همه فایل‌ها را به جز آن‌هایی که دارای پسوند h. هستند از آرشیو استخراج کنیم. بنابراین از دستور زیر استفاده می‌کنیم:

unzip -q source_code.zip -x *.h

Zip یا Unzip کردن فایل‌ها

بازنویسی فایل‌ها

فرض کنید، یک آرشیو را استخراج کردید، اما چند مورد از فایل‌های استخراج شده را به اشتباه حذف کرده‌اید.

یک راه‌حل سریع این است که فایل‌ها را یک بار دیگر استخراج کنید. اما اگر تلاش کنید فایل ZIP را در همان دایرکتوری قبلی استخراج کنید ابزار unzip به شما هشدار می‌دهد که آیا می‌خواهید فایل‌ها را بازنویسی کنید. این هشدار یکی از مقادیر زیر را می‌پذیرد (به جز r برای تغییر نام، بقیه موارد به کوچکی یا بزرگی حروف حساس هستند):

  • y: بله، این فایل را بازنویسی کن.
  • n: نه، این فایل را بازنویسی نکن.
  • A: بله، همه فایل‌ها را بازنویسی کن.
  • N: نه، هیچ یک از فایل‌ها را بازنویسی نکن.
  • r: تغییر نام، این فایل را استخراج کن، اما یک نام جدید به آن بده. این نام جدید از شما پرسیده می‌شود.

Zip یا Unzip کردن فایل‌ها

برای این که ابزار unzip را ملزم به استخراج همه فایل‌ها بکنیم، می‌توانیم از گزینه o- استفاده کنیم.

unzip -o -q source_code.zip

Zip یا Unzip کردن فایل‌ها

بهینه‌ترین روش برای جایگزینی فایل‌های مفقود این است که unzip تنها آن فایل‌هایی را از آرشیو استخراج کند که در دایرکتوری مقصد نیستند. به این منظور باید از گزینه n- استفاده کنیم.

unzip -n source_code.zip

بررسی محتوای داخل یک فایل ZIP

دیدن فهرست فایل‌های داخل یک آرشیو ZIP پیش از استخراج آن در اغلب موارد راهگشا است. این کار از طریق استفاده از گزینه l- میسر است. این دستور از طرق less به صورت Pipe اجرا می‌شود تا خروجی قابل مدیریتی به نمایش درآید.

unzip -l source_code.zip | less

Zip یا Unzip کردن فایل‌ها

خروجی دستور فوق دایرکتوری‌ها و فایل‌های درون فایل ZIP را نمایش می‌دهد و همچنین طول آن‌ها و زمان و تاریخ افزودن به آرشیو قابل مشاهده هستند. در نهایت با ارسال کاراکتر q می‌توانیم از less خارج شویم.

Zip یا Unzip کردن فایل‌ها

روش‌های دیگری نیز برای مشاهده محتوای داخلی یک فایل آرشیو ZIP وجود دارند که انواع مختلفی از اطلاعات را ارائه می‌کنند و در ادامه آن‌ها را بررسی می‌کنیم.

افزودن یک رمز عبور با دستور zipcloak

اگر یک فایل ZIP را ایجاد کرده و فراموش کرده باشید، رمز عبوری برای آن تعیین کنید چه راه‌حلی وجود دارد؟

در این موارد می‌توان با استفاده از دستور zipcloak به سرعت یک رمز عبور به فایل اضافه کرد. کافی است نام فایل ZIP را در خط فرمان ارسال کنید تا رمز عبور از شما پرسیده شود. پس از تأیید مجدد، رمز عبور روی فایل فعال می‌شود.

zipcloak source_code.zip

Zip یا Unzip کردن فایل‌ها

دیدن جزییات فایل با دستور zipdetails

دستور zipdetails نیز اطلاعات زیادی در مورد فایل ZIP به نمایش می‌گذارد. تنها روش معقول برای مدیریت مقدار خروجی این دستور آن است که آن را از طریق less به صورت Pipe اجرا کنیم:

zipdetails source_code.zip | less

Zip یا Unzip کردن فایل‌ها

توجه کنید که این اطلاعات شامل نام‌های فایل‌ها می‌شوند و حتی اگر فایل ZIP دارای رمز عبور باشد باز نام فایل‌ها نمایش پیدا می‌کند. این نوع اطلاعات درون فایل ZIP به صورت فراداده ذخیره می‌شوند و بخشی از داده‌های رمزنگاری‌شده نیستند.

Zip یا Unzip کردن فایل‌ها

جستجو درون فایل با دستور zipgrep

دستور zipgrep امکان جستجو درون فایل‌های یک فایل ZIP را فراهم می‌سازد. در مثال زیر می‌خواهیم بدانیم که کدام فایل‌ها درون فایل ZIP دارای متنی به صورت keyval.h هستند.

zipgrep keyval.h source_code.zip

Zip یا Unzip کردن فایل‌ها

چنان که می‌بینیم، فایل‌های slang.c و getval.c شامل رشته keyval.h هستند. همچنین می‌بینیم که دو کپی از هر یک از این فایل‌ها در دایرکتوری‌های مختلف فایل ZIP قرار دارند.

مشاهده اطلاعات با دستور zipinfo

دستور zipinfo روش دیگری برای بررسی فایل‌های درون آرشیو ZIP در اختیار ما قرار می‌دهد. همانند روش قبلی، باید خروجی را از طریق less به صورت pipe عرضه کنیم:

zipinfo source_code.zip | less

Zip یا Unzip کردن فایل‌ها

خروجی دستور فوق از چپ به راست شامل اطلاعات زیر است:

  • دسترسی‌های فایل.
  • نسخه ابزاری که برای ایجاد فایل ZIP استفاده شده است.
  • اندازه فایل اصلی.
  • توصیفی از فایل (در ادامه توضیح خواهیم داد).
  • روش فشرده‌سازی (در این مورد deflation است).
  • داده‌ها و زمان.
  • نام فایل و دایرکتوری (در صورت وجود).

توصیف فایل از دو کاراکتر تشکیل یافته است. کاراکتر نخست یک b یا t است که به ترتیب نشان‌دهنده باینری یا متنی بودن فایل است. اگر یک حرف بزرگ باشد به این معنی است که فایل رمزنگاری‌شده است. کاراکتر دوم می‌تواند یکی از چهار کاراکتر زیر باشد. این کاراکتر نشان می‌دهد که نوع فراداده درون این فایل چیست. عدم وجود کاراکتر به معنی «هدر محلی بسط یافته» (extended local header)، یک «فیلد اضافی» (extra field) یا هر دوی آن‌ها است:

  • -: اگر هیچ کام از موارد فوق نباشد کاراکتر خط تیره نمایش می‌یابد.
  • I: در صورتی که یک هدر محلی بسط یافته وجود داشته باشد، اما فیلد اضافی موجود نباشد.
  • x: اگر هدر محلی بسط موجود یافته باشد، اما فیلد اضافی موجود نباشد.
  • X: اگر هر دو مورد هدر محلی بسط یافته و فیلد اضافی موجود باشد.

افراز فایل با دستور zipsplit

اگر لازم باشد یک فایل ZIP را به کس دیگری ارسال کنید، اما مشکل محدودیت اندازه یا مشکلاتی در زمینه انتقال فایل وجود داشته باشد، می‌توانید از دستور zipsplit برای افراز کردن فایل ZIP اصلی به مجموعه‌ای از فایل‌های ZIP کوچک‌تر بکنید.

گزینه n- (اندازه) امکان تعیین اندازه بیشینه برای هر یک از فایل‌های ZIP جدید را می‌دهد. در این مثال، ما می‌خواهیم فایل source_code.zip را افراز کنیم. ما نمی‌خواهیم هیچ یک از فایل‌های ZIP حاصل بزرگ‌تر از 100 کیلوبایت (102400 بایت) باشند.

zipsplit -n 102400 source_code.zip

Zip یا Unzip کردن فایل‌ها

اندازه‌ای که انتخاب می‌شود، نمی‌تواند کمتر از اندازه هر یک از فایل‌ها در آرشیو ZIP باشد.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
howtogeek
۳ دیدگاه برای «زیپ و آنزیپ کردن فایل ها با ترمینال لینوکس — از صفر تا صد»

-bash: zip: command not found

بسیار عالی بود! ممنون.

سلام
بسیار ساده بیان شده بود
سوالی که پیش اومد اگر بخواییم یک پوشه یا فایل رو با حجم دلخواه به تعدادی پارت تبدیل کنیم از چه دستوری استفاده مبشه؟
ینی فایل یک گیگ رو مثلا 10 فایل صد مگی بکنیم

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *