یکی از فرمت‌های آرشیو که مثل ZIP‌ بسیار پرکاربرد است، فرمت tar.gz و مشابه آن، tar.bz2 است. این دو فرمت در حقیقت حالت فشرده شده‌ی فایل‌های Tar هستند. از این فرمت‌ها به خصوص در لینوکس و سرورهای لینوکسی بسیار استفاده می‌شود. به علاوه در توزیعاتی مثل Ubuntu و حتی در مک‌او‌اس اپل و حین کار با ترمینال، کاربرد فراوانی دارد.

در این مقاله به روش استخراج فایل‌های آرشیو Tar.gz و Tar.bz2 یا به زبان دیگر، Extract کردن فایل‌ها در لینوکس می‌پردازیم.

آشنایی با پسوندهای tar.gz و tar.bz2

فایلی با پسوند tar.bz2 یا tar.gz در حقیقت یک فایل آرشیو است که در آن ممکن است تعداد زیادی فایل و فولدر موجود باشد. فرمت Tar حالت فشرده‌نشده‌ی این دو فرمت است که در واقع تمام فایل و فولدرها را بدون فشرده‌سازی، در کنار هم قرار می‌دهد و البته کاربرد به مراتب کمتر است. در واقع پسوندها جی‌زیپ یا gz و بیت‌زیپر ۲ یا bz2 مربوط به فایل‌های فشرده می‌شوند.

فایل‌های Tar از سال ۱۹۷۹ و با معرفی دستور tar مورد استفاده‌ی مدیران سیستم و شبکه قرار گرفته‌اند. اکنون پس از حدود ۴۰ سال هم این فرمت کاربرد دارد اما برای کاهش حجم فایل‌ها، حالت فشرده‌ای از فرمت tar به وفور مورداستفاده قرار می‌گیرد.

خوشبختانه پشتیبانی از فایل‌هایی که با دو الگوریتم bzip2 و gzip فشرده شده، بسیار عالی است و در واقع اگر به پوسته‌ی Bash در لینوکس یا مک‌او‌اس دسترسی داشته باشید، می‌توانید این نوع فایل‌ها را باز کنید.

نحوه اکسترکت کردن محتویات فایل‌های Tar

فرض کنید دو فایل به اسم ukulele_songs.tar.gz و guitar_songs.tar.bz2 حاوی چند ترک موسیقی را دانلود کرده‌اید و در فولدر Downloads ذخیره شده است.

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

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

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

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

در فرمان قبلی از آپشن xvzf استفاده شده است و در واقع دستور tar تعدادی آپشن دارد. کاربرد آپشن‌های مختلف این دستور به صورت زیر است:

  • -x: برای اکسترکت کردن و در واقع استخراج فایل‌های موجود در فایل آرشیو کاربرد دارد.
  • -v: یا Verbose برای لیست کردن فایل‌ها حین اکسترکت کردن از فایل آرشیو کاربرد دارد.
  • -z: اگر آرشیو از نوع gzip باشد، برای مشخص کردن الگوریتم فشرده‌سازی از این آپشن استفاده می‌شود.
  • -j: اگر آرشیو از نوع bzip2 باشد، برای مشخص کردن الگوریتم فشرده‌سازی از این آپشن استفاده می‌شود.
  • -f: یا File که پس از آن نام فایل Tar که قرار است روی آن کار شود، نوشته می‌شود.

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

برای لیست کردن فایل‌های موجود در یک فولدر، مثل همیشه می‌توانید از فرمان ls در ترمینال استفاده کنید. در مورد مثال با اجرای دستور قبلی، فولدری به اسم Ukulele Songs ایجاد شده و فایل‌ها درون آن قرار گرفته است. در واقع این فولدر بخشی از آرشیو Tar بوده است. 

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

و اما سراغ فایل بعدی که با الگوریتم bzip2 فشرده شده می‌رویم. برای اکسترکت کردن فایل با پسوند bz2، می‌بایست به جای آپشن -z از آپشن -j استفاده شود. لذا دستور زیر برای اکسترکت کردن فایل دوم مناسب است:

با اجرای این دستور، حین فرآیند استخراج فایل‌ها، لیست فایل‌ها نمایش داده می‌شود:

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

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

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

مشخص کردن محل اکسترکت کردن با دستور tar

اگر نخواهید فایل‌های یک آرشیو در فولدر کاری فعلی اکسترکت شود، می‌بایست فولدر مقصد را با استفاده از آپشن -C تعیین کنید. در واقع بدون وارد کردن این آپشن، محل پیش‌فرض اکسترکت کردن فایل و فولدرها، مسیر فعلی خواهد بود که در دو مثال قبلی بررسی کردیم.

به عنوان مثال اگر بخواهید فایل‌ها در فولدر خانه و سپس فولدر Documents و Songs ذخیره شود، می‌بایست این مسیر را به صورت کامل پس از آپشن -C تایپ کنید:

و پس از اکسترکت کردن، با استفاده از دستور لیست کردن یا در واقع فرمان ls بررسی کنید که محتویات فولدر Documents/Songs چه تغییری کرده است:

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

دقت کنید که اگر فولدر مقصد پیشاپیش وجود نداشته باشد، دستور tar آن را ایجاد نخواهد کرد! برای ایجاد فولدر و سپس اکسترکت کردن، می‌توانید از دستور mkdir و tar به صورت پشت‌سر‌هم استفاده کنید. به عبارت دیگر ابتدا دستور mkdir را با آپشن -p و سپس آدرس فولدر مقصد اجرا کنید و در ادامه دستور tar را اجرا کنید. برای اجرا در یک خط، می‌توانید این دو فرمان را با استفاده از && ترکیب کنید:

و اما توضیحی در مورد آپشن -p: حین استفاده از دستور mkdir برای ساخت فولدر، اگر از این آپشن استفاده کنید، دستور mkdir فولدرهای مادر را تا رسیدن به فولدر نهایی می‌سازد. به عبارت دیگر فولدرهای Parent در صورت نیاز ساخته می‌شود.

لیست کردن محتویات فایل Tar قبل از استخراج فایل‌ها

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

برای بررسی محتویات فایل آرشیو، از سوییچ -t استفاده کنید. به علاوه می‌توانید از دستور less استفاده کنید تا لیست فایل‌ها به صورت صفحه‌صفحه نمایش داده شود.

همان‌طور که می‌بینید در دستور فوق آپشن -z وجود ندارد! این آپشن تنها در زمان اکسترکت کردن آرشیو ضروری است و در واقع برای لیست کردن محتویات، نیازی به مشخص کردن الگوریتم نیست.

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

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

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

همان‌طور که مشاهده می‌کنید در فولدر اصلی، فولدرهای فرزند به نام Random Songs و غیره موجود است و در این فولدرها نیز تعدادی فایل وجود دارد.

چگونه یک فایل یا چند فایل و فولدر موجود در آرشیو Tar‌ را اکسترکت کنیم؟

برای اکسترکت کردن فایل‌های موجود در یک فولدر زیرمجموعه در یک فایل آرشیو، می‌توانید مسیر موردنظر را در انتهای دستور اضافه کنید. اگر در مسیر موردبحث، از اسپیس استفاده شده باشد، می‌بایست آدرس را در میان دو دابل‌کوتیشن یا " قرار بدهید. مثل مورد زیر:

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

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

اکسترکت کردن فقط یک فایل خاص هم ساده است و کافی است آدرس و نام کامل فایل موجود در آرشیو را در انتهای دستور قرار بدهید:

و نتیجه اکسترکت شدن همان فایل خاص است:

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

اکسترکت کردن تعدادی فایل نیز امکان‌پذیر است. برای این کار می‌بایست از علامت ستاره یا * استفاده کنید که معادل هر عبارتی است و در صورت نیاز می‌بایست از ? استفاده کنید که معادل یک کاراکتر است. به علاوه می‌بایست آپشن --wildcards‌ را پس از دیگر آپشن‌های دستور tar اضافه کنید. به نمونه‌ی زیر توجه کنید:

منظور از Ukulele Songs/Possibles/B* در انتهای دستور فوق، هر فایلی است که نام آن با حرف B شروع می‌شود و در فولدر Ukulele Songs/Possibles واقع شده است.

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

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

اگر ساختار فولدرهای تودرتو در یک فایل Tar مهم نباشد و بخواهید تمام فایل‌ها را در یک فولدر اکسترکت کنید، می‌توانید از آپشن --strip-components استفاده کنید. پس از این آپشن می‌بایست یک عدد وارد کنید که در واقع مشخص‌کننده‌ی سطوح فولدرها است که نادیده گرفته می‌شود. فایل‌های موجود در فولدرهایی که نادیده گرفته شده، اکسترکت می‌شود اما فولدر مربوطه ایجاد نمی‌شود.

به عنوان مثال اگر از آپشن --strip-components=1 استفاده کنید، فولدر بالادست که در مثال ما Ukulele Songs بوده، ایجاد نمی‌شود. لذا فایل و فولدرهای داخل این فولدر، در مسیر فعلی یا در فولدری که به عنوان مقصد مشخص کرده‌اید، اکسترکت می‌شود.

نتیجه را در تصویر زیر مشاهده می‌کنید:

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

اگر به جای ۱ سطح، ۲ سطح فولدرها را نادیده بگیرید و در واقع از آپشن --strip-components=2 استفاده کنید، فولدرهای داخل فولدر بالادستی هم نادیده گرفته می‌شوند اما فولدرهای داخل این فولدرها، در صورت وجود، ساخته خواهند شد.

و نتیجه را در تصویر زیر مشاهده می‌کنید:

آموزش اکسترکت کردن فایل‌های موجود در tar.gz یا .tar.bz2 در لینوکس

برای اطلاعات کامل‌تر در مورد تمام آپشن‌های دستور tar می‌توانید از صفحه‌ی مربوطه در سایت راهنمای لینوکس دیدن کنید. آپشن‌های این دستور بسیار متنوع و زیاد است و شاید یکی از دستوراتی است که بیشترین تعداد آپشن را دارند.